3 回答

TA貢獻(xiàn)1804條經(jīng)驗 獲得超3個贊
另一個解決方案。從一組(唯一的)字符開始,遍歷字符串中的字符,從該組中刪除字符,如果它已經(jīng)被刪除,那么它必須是重復(fù)的。使用它來構(gòu)建一組重復(fù)的字符。
def duplicate_encode(word):
word = word.upper()
s = set(word)
dups = set()
for char in word:
if char in s:
s.remove(char)
else:
dups.add(char)
return "".join(")" if char in dups else "("
for char in word)
print(duplicate_encode("'yy! R)!QvdG'"))
給出:
))))((()(((()

TA貢獻(xiàn)1826條經(jīng)驗 獲得超6個贊
from collections import Counter
def duplicate_encode(word):
res = list(word.lower())
counter = Counter(word.lower())
counter2 = dict.copy(counter)
print(counter2)
for k, value in enumerate(res):
if counter2[value] == 1:
res[k] = '('
else:
res[k] = ')'
# for key in counter2.keys():
# word = str(word.lower()).replace(key, str(counter2[key]))
return "".join(res)
res = duplicate_encode('yy! R)!QvdG')
print("res", res)

TA貢獻(xiàn)1871條經(jīng)驗 獲得超13個贊
(當(dāng)您的輸入字符串包含大括號(如or )時,就會出現(xiàn)問題)。
當(dāng)發(fā)生這種情況時,就像在您的示例中一樣,錯誤的字符將被替換,您可以通過print()在代碼中添加語句來驗證,每次更改時word。
我已經(jīng)在你的代碼中替換了那部分。
from collections import Counter
def duplicate_encode(word):
counter = Counter(word.lower())
counter2 = dict.copy(counter)
print(counter2)
for k,v in counter2.items():
if counter2[k]==1:
counter2[k]='('
else:
counter2[k]=')'
print(counter2)
new_word = ''
for character in word:
new_word += counter2[character.lower()]
return new_word
但是請注意,該代碼有很多冗余和不必要的內(nèi)存使用。它可以簡化為以下內(nèi)容:
from collections import Counter
def duplicate_encode(word):
lower_word = word.lower()
new_word = ''
counter = Counter(lower_word)
for char in lower_word:
if counter[char] > 1:
new_word += ')'
else:
new_word += '('
return new_word
添加回答
舉報