首页 > 解决方案 > 在 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)")

标签: python-3.xstringdictionaryreplacecharacter-encoding

解决方案


您的代码中有两个错误:

  • 唯一的(和尾随的)(inword导致 finalword = replace(word, '(', ')')以便所有 (s 都被替换为)s;因此,我 outword从头开始构建字符串;
  • len(count) < len(word)如果有任何重复的字符word;因此,k必须迭代word而不是 over count

固定代码:

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 => (())(

推荐阅读