O(n3n
루프를 string1
하고 string2
, 모든 문자 확인을 위해 얼마나 자주는에서 찾을 수 있습니다 string1
와 string2
. 나는 문자가 다른 문자열보다 한 문자열에 더 자주 있으며, 순열이 아닙니다. 모든 문자의 빈도가 같으면 문자열은 서로의 순열입니다.
이것을 정확하게 만드는 파이썬 조각이 있습니다.
s1="abcaba"
s2="aadbba"
def check_if_permutations(string1, string2):
for string in [string1, string2]:
# string references string1
# string2, it is not a copy
for char in string:
count1=0
for char1 in string1:
if char==char1:
count1+=1
count2=0
for char2 in string2:
if char==char2:
count2+=1
if count1!=count2:
print('unbalanced character',char)
return()
print ("permutations")
return()
check_if_permutations(s1,s2)
string
string1
string2
char
char1
char2
O(logn)count1
count2
string
[string1, string2]
물론 카운트 변수가 필요하지 않지만 포인터를 사용할 수 있습니다.
s1="abcaba"
s2="aadbba"
def check_if_permutations(string1, string2):
for string in [string1, string2]:
# string references one of string1
# or string2, it is not a copy
for char in string:
# p1 and p2 should be views as pointers
p1=0
p2=0
while (p1<len(string1)) and (p2<len(string2)):
# p1>=len(string1): p1 points to beyond end of string
while (p1<len(string1)) and (string1[p1]!=char) :
p1+=1
while(p2<len(string2)) and (string2[p2]!=char):
p2+=1
if (p1<len(string1)) != (p2<len(string2)):
print('unbalanced character',char)
return()
p1+=1
p2+=1
print ("permutations")
return()
check_if_permutations(s1,s2)
O(log(n))
n