python-3.x - 在 Python 中对字符串的重复字符进行编码
问题描述
我正在尝试对字符串进行编码,以将字符替换为“(”,如果它只出现一次,如果它出现多次,则用“)”替换。所以“你好”变成了“(())(”。我正在使用字典来解决这个问题。我正在保存字符串中每个字符的出现次数。然后我检查该字符是否多次出现然后我使用。 replace() 将其替换为 ')' 否则为 '('。当字符串包含 ')' 时会出现问题。
例如,如果我有字符串“abca)”。我应该得到“)(())”作为结果,但我得到“(((((”)因为当程序到达')'时,它看到它只发生了一次,然后用')更改每次出现的')' ('。其余时间都可以正常工作。这是我的代码:
def duplicate_encode(word):
count = {}
word = word.lower()
for ch in word:
if ch in count:
count[ch] += 1
else:
count[ch] = 1
for k in count:
if count[k] > 1:
word = word.replace(k, ')')
else:
word = word.replace(k, '(')
print(word)
duplicate_encode("abca)")
解决方案
您的代码中有两个错误:
- 唯一的(和尾随的)
(
inword
导致 finalword = replace(word, '(', ')')
以便所有(
s 都被替换为)
s;因此,我outword
从头开始构建字符串; len(count) < len(word)
如果有任何重复的字符word
;因此,k
必须迭代word
而不是 overcount
。
固定代码:
def duplicate_encode(word):
count = {}
outword = ''
word = word.lower()
for ch in word:
if ch in count:
count[ch] += 1
else:
count[ch] = 1
for k in word:
if count[k] > 1:
outword += ')'
else:
outword += '('
print( word, '=>', outword )
duplicate_encode("abca)")
duplicate_encode("hello")
输出:.\SO\67089558.py
abca) => )(()(
hello => (())(