gpt4 book ai didi

python - 找到一组是字谜的字符串

转载 作者:太空狗 更新时间:2023-10-30 02:17:42 25 4
gpt4 key购买 nike

本题引用this problem on lintcode .我有一个可行的解决方案,但对于庞大的测试用例来说,它花费的时间太长了。我想知道如何改进它?也许我可以减少在外循环中进行比较的次数。

class Solution:
# @param strs: A list of strings
# @return: A list of strings
def anagrams(self, strs):
# write your code here
ret=set()
for i in range(0,len(strs)):
for j in range(i+1,len(strs)):
if i in ret and j in ret:
continue
if Solution.isanagram(strs[i],strs[j]):
ret.add(i)
ret.add(j)

return [strs[i] for i in list(ret)]


@staticmethod
def isanagram(s, t):
if len(s)!=len(t):
return False
chars={}
for i in s:
if i in chars:
chars[i]+=1
else:
chars[i]=1

for i in t:
if i not in chars:
return False
else:
chars[i]-=1
if chars[i]<0:
return False

for i in chars:
if chars[i]!=0:
return False
return True

更新:只是添加,而不是寻找内置的 pythonic 解决方案,例如使用已经优化的 Counter。已添加Mike的建议,但还是超时。

最佳答案

跳过你已经放在集合中的字符串。不要再测试它们。

# @param strs: A list of strings
# @return: A list of strings
def anagrams(self, strs):
# write your code here
ret=set()
for i in range(0,len(strs)):
for j in range(i+1,len(strs)):

# If both anagrams exist in set, there is no need to compare them.
if i in ret and j in ret:
continue

if Solution.isanagram(strs[i],strs[j]):
ret.add(i)
ret.add(j)

return [strs[i] for i in list(ret)]

您还可以在遍历字母之前在变位词测试中进行长度比较。只要字符串的长度不同,它们就不可能是变位词。此外,当 chars 中的计数器在比较 t 中的值时达到 -1 时,只返回 false。不要再次遍历 chars

@staticmethod
def isanagram(s, t):
# Test strings are the same length
if len(s) != len(t):
return False

chars={}
for i in s:
if i in chars:
chars[i]+=1
else:
chars[i]=1

for i in t:
if i not in chars:
return False
else:
chars[i]-=1
# If this is below 0, return false
if chars[i] < 0:
return False

for i in chars:
if chars[i]!=0:
return False
return True

关于python - 找到一组是字谜的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39398444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com