【发布时间】:2020-06-01 02:37:20
【问题描述】:
我正在自学使用 Python 编码,并且我已经在 Codewars 上完成了一段时间的 kata(目前主要是 7 kyu)。在尝试升级时偶然发现了following 6 kyu kata,据我所知,这似乎是可以实现的:
完成将字符串作为输入的函数,并返回所有未配对字符的列表(即它们在字符串中出现奇数次),按照它们作为数组遇到的顺序。
如果有多个出现可供选择,则取最后出现的未配对字符。
注意事项:
使用的字符范围很广,其中一些字符可能无法在您的浏览器中正确呈现。 您的解决方案在字符串长度方面应该是线性的,才能通过最后的测试。 例子:
"Hello World" --> ["H", "e", " ", "W", "r", "l", "d"]
“代码战”--> [“C”、“o”、“d”、“e”、“w”、“a”、“r”、“s”]
"woowee" --> []
"wwoooowweeee" --> []
“赛车”--> [“e”]
“妈妈”--> [“M”]
"妈妈" --> ["M", "m"]
以下 Python 3.6.0 代码通过示例测试:
def function_name(s):
result = []
lengthS = len(s)
dictResult = {}
for item in s[-1:(-1 * lengthS - 1):-1]:
numLetters = 0
for number in range(lengthS):
if item == s[number]:
numLetters = numLetters + 1
if numLetters % 2 != 0:
dictResult[item] = numLetters
for key in list(dictResult.keys())[-1:(-1 * (len(list(dictResult))) - 1):-1]:
result.append(key)
return result
由于以下原因,运行一整轮测试失败:
执行超时(12000 毫秒)
注释代码的某些部分可以让我更快地失败整轮测试,因此我可以看到测试使用很长的字符串。
很明显,我的代码没有进行性能优化。阅读一些关于算法的文章,我怀疑我的代码由于在另一个 for 循环中的 for 循环而缺乏性能,这是 O(n²) 复杂度操作。这是我坚持了一段时间的地方。我不确定这是否是唯一需要更改的代码,如果是 - 只是无法理解如何做到这一点。
注意。请不要发布完整解决此问题的答案。我宁愿自己想出最终的代码。因此,如果您能指出我的代码中需要注意的部分并提供建议、示例代码或进一步阅读,我将非常高兴。
【问题讨论】:
-
嗨,Alex,IMO 认为您的问题非常适合代码审查codereview.stackexchange.com,您应该试一试。
-
@Alex 你能分享链接吗?
-
@RomainL。我认为这是一个话题,因为 OP 还没有一个可行的解决方案。 meta.stackexchange.com/questions/102852/…
-
@vivek_23 没错,但是这段代码(和 OP)无论如何都可以从代码审查中受益。
-
@vivek_23 更新问题以包含 URL
标签: arrays python-3.x string algorithm performance