Dan*_*nko 4 python sorting string
我正在处理简单的问题,检查两个字符串是否是字谜.我写了一个简单的代码,可以检查,两个字符串,如'abcd'和'dcba'是字谜,但我知道如何处理更复杂的字符串,如"Astronomer"和"Moon starter"
line1 = input('Enter the first word: ')
line2 = input('Enter the second word: ')
def deleteSpaces(s):
s_new = s.replace(" ","")
return s_new
def anagramSolution2(s1,s2):
alist1 = list(deleteSpaces(s1))
alist2 = list(deleteSpaces(s2))
print(alist1)
print(alist2)
alist1.sort()
alist2.sort()
pos = 0
matches = True
while pos < len(deleteSpaces(s1)) and matches:
if alist1[pos]==alist2[pos]:
pos = pos + 1
else:
matches = False
return matches
Run Code Online (Sandbox Code Playgroud)
首先我认为问题在于使用空格,但后来我明白,如果字符串的大小不同,我的算法就不起作用了.
在那种情况下我不知道该怎么做.
在这里,我找到了一个漂亮的解决方案,但它也不起作用
def anagrams(s1,s2):
return [False, True][sum([ord(x) for x in s1]) == sum([ord(x) for x in s2])]
Run Code Online (Sandbox Code Playgroud)
如果我运行这个函数并在两个字符串上测试它,我会得到这样的输出
Examples:
First Word: apple
Second Word: pleap
output: True
First Word: Moon starter
Second Word: Astronomer
output: False //however it should should be True because this words are anagrams
Run Code Online (Sandbox Code Playgroud)
你的算法没问题.你的问题是你不考虑大写和小写字母.改变两条线
alist1 = list(deleteSpaces(s1))
alist2 = list(deleteSpaces(s2))
Run Code Online (Sandbox Code Playgroud)
至
alist1 = list(deleteSpaces(s1).lower())
alist2 = list(deleteSpaces(s2).lower())
Run Code Online (Sandbox Code Playgroud)
将解决您的问题.作为替代方案,您可以简单地使用以下功能:
def anagrams(s1, s2):
def sort(s):
return sorted(s.replace(" ", "").lower())
return sort(s1) == sort(s2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8192 次 |
| 最近记录: |