두 문자열의 입력이 주어 지므로 한 문자열이 다른 문자열의 아나그램인지 확인하기 위해 다음 선형 시간 솔루션을 사용할 수 있습니다. 나는 이것에 더 간결하고 비단뱀적인 선형 시간 해결책을 원했다.선형 시간에 아나그램 문자열 확인
def perm_check(str1,str2):
if len(str1)!=len(str2):
return False
d1,d2={},{}
for i in range(len(str1)):
l1=str1[i]
l2=str2[i]
if l1 in d1:
d1[l1]+=1
else:
d1[l1]=1
if l2 in d2:
d2[l2]+=1
else:
d2[l2]=1
for letter in d1:
if letter not in d2:
return False
if d1[letter] != d2[letter]:
return False
return True
print(perm_check("stab","bats"))
어떻게 최적화 할 수 있습니까?
문자열을 정렬하는 것은 선형에 비해 너무 나쁜 nlogn에서 최고입니다 시간은 –
@ sarathjoseph가 옳았음에도 불구하고 +1 이하는 없습니다. 작은 문자열의 경우 카운터와 같은 사전을 만드는 데 오버 헤드가 없으므로 정렬을하면 성능이 향상됩니다. –
예 :'string1, string2 = "herlper", "herrlpe"'. 이제 sorted를 사용할 때, '% timeit sorted (string1) == sorted (string2)'는 에'1000000 개의 루프, 3 : 1.39 μs/루프', 카운터 사용시에는 '% timeit Counter (string1) == 카운터 (string2)''100000 개의 루프, 3 : 8.48 μs/루프 '를 제공합니다. –