【发布时间】:2016-02-26 10:52:24
【问题描述】:
这是问题:
编写一个名为 test_for_anagrams 的函数,它接收两个字符串 参数,两者都由字母字符组成并返回 如果两个字符串是字谜,则为 True,否则为 False。两个字符串是 字谜,如果一个字符串可以通过重新排列来构造 使用其他字符串中的所有字符 原始字符串恰好一次。例如,字符串“Orchestra”和 “Carthorse”是字谜,因为每一个都可以由 使用所有字符重新排列另一个字符中的字符 在其中一个中恰好一次。请注意,大小写无关紧要 这里即小写字符可以被认为与 大写字符。
我的代码:
def test_for_anagrams (str_1, str_2):
str_1 = str_1.lower()
str_2 = str_2.lower()
print(len(str_1), len(str_2))
count = 0
if (len(str_1) != len(str_2)):
return (False)
else:
for i in range(0, len(str_1)):
for j in range(0, len(str_2)):
if(str_1[i] == str_2[j]):
count += 1
if (count == len(str_1)):
return (True)
else:
return (False)
#Main Program
str_1 = input("Enter a string 1: ")
str_2 = input("Enter a string 2: ")
result = test_for_anagrams (str_1, str_2)
print (result)
这里的问题是当我输入字符串为Orchestra 和Carthorse 时,结果为False。字符串The eyes 和They see 相同。任何帮助将不胜感激。
【问题讨论】:
-
现在没时间调试你的程序,但这里有一个简短的解决方案:
return Counter(str_1.lower()) == Counter(str_2.lower())和Counter来自collections。 -
只是一个注释 - 计数器是
collections模块的一部分。我想发布答案,但@timgeb 更快:) -
也可以排序再比较。
-
@pp_ 是的,但是这个问题可以而且应该在 O(n) 中解决。
-
@timgeb 我完全同意,将其视为附注。
标签: python python-3.x