O ( n3n
Passa attraverso string1
e string2
, per ogni personaggio, controlla quanto spesso può essere trovato in string1
e string2
. Io un personaggio è più spesso in una stringa che nell'altra, non è una permutazione. Se le frequenze di tutti i caratteri sono uguali, le stringhe sono permutazioni l'una dell'altra.
Ecco un pezzo di pitone per renderlo preciso
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]
Ovviamente non hai nemmeno bisogno delle variabili di conteggio ma puoi usare i puntatori.
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 ) )
Quindi in realtà non dipende n o la dimensione dell'alfabeto.