【发布时间】:2018-03-16 05:06:54
【问题描述】:
堆栈上的第一个问题, 我在hackerrank的前几个挑战中遇到了“多少删除来分析2个单词”。我在网上看到了其他一些解决方案,但我不明白为什么我的速度慢得多。我似乎有一个“正确”的算法,因为我计算了一些测试用例并找到了相应的预期输出
def number_needed(a, b):
count = 0
isFound = False
matchedBs = []
for letterA in a:
for j,letterB in enumerate(b):
if letterA == letterB and (j not in matchedBs):
isFound = True
matchedBs.append(j)
break
if not isFound:
count += 1
isFound = False
return count + (len(b)-len(matchedBs))
a = input().strip()
b = input().strip()
print(number_needed(a, b))
所以我想弄清楚我的算法的总体思路是瓶颈还是其中的一些错误。 谢谢!
【问题讨论】:
-
每个字母是否只出现一次?因为matchedBs每个字母只有一次。
-
@BradSolomon 失败的测试用例使用 400-500 个字符字符串
-
@inarilo 没有一个字母可以出现多次,但我不确定为什么会出现问题。
-
我不知道python所以也许我弄错了,但你似乎忽略了任何已经在matchedBs中的字母,所以任何重复的字母都不会被计算在内,你似乎也不会检查重复的字母是否匹配 B 中的重复字母,而不是已经匹配的相同出现..
-
if 语句的第二部分检查是否存在? "letterA == letterB and (j not in mappedBs)"
标签: python python-3.x anagram