You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeWars字符编码练习:重复字符编码代码失效求助

解决你的Duplicate Encode函数问题

我一眼就看出问题出在哪了——你在循环里直接修改了原字符串word,这导致后续的字符统计完全偏离了原始输入的情况!

举个具体的例子,比如你测试输入"(()":

  1. 转小写后是"(()"
  2. 第一次循环取到字符'(',统计它在当前word里的次数是2,于是把所有'('替换成')',此时word变成了")))"
  3. 接下来循环的字符变成了修改后的word里的')',统计它的次数是3,于是又把所有')'替换成')'(看起来没变化,但已经完全忽略了原始输入里那个只出现一次的')')
  4. 最终得到的结果是")))",但正确结果应该是"))("

修正方案

我们需要先把原始字符串转成小写并保存为一个固定的参考字符串,然后基于这个参考字符串去统计每个字符的出现次数,而不是在循环中修改原字符串。这样就能保证每次统计的都是原始字符的出现次数。

修正后的代码如下:

def duplicate_encode(word):
    lower_word = word.lower()
    result = []
    for ch in lower_word:
        if lower_word.count(ch) == 1:
            result.append("(")
        else:
            result.append(")")
    return "".join(result)

代码解释

  1. 首先把输入字符串转成小写,保存到lower_word里,这个变量全程不会被修改,作为我们统计字符出现次数的依据
  2. 创建一个空列表result来存储每个字符对应的替换结果(用列表拼接比字符串拼接效率更高,尤其是处理长字符串的时候)
  3. 遍历lower_word里的每个字符,对每个字符,用lower_word.count(ch)获取它在原始小写字符串里的出现次数,然后决定添加(还是)到result里
  4. 最后用"".join(result)把列表拼接成字符串返回

优化小技巧(可选)

如果处理的字符串很长,count()方法每次都会遍历整个字符串,时间复杂度是O(n²)。我们可以先用collections.Counter提前统计好所有字符的出现次数,这样时间复杂度就能降到O(n):

from collections import Counter

def duplicate_encode(word):
    lower_word = word.lower()
    char_counts = Counter(lower_word)
    return "".join("(" if char_counts[ch] == 1 else ")" for ch in lower_word)

这样不管输入是什么字符(包括(、)或者随机字符),都能正确处理啦!

内容的提问来源于stack exchange,提问作者Vedant Matanhelia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 12:07:48