Я думаю, что это самый простой алгоритм (с O ( n3) время, N длина струн)
Цикл 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 ( журналн )для подсчета ( count1, count2). Нужно проверить, равны ли символы или нет, но не нужно упорядочивать эти символы. Возможно, для небольших целых чисел нужны переменные (например, для хранения логических значений или для представления позиции stringв [string1, string2].
Конечно, вам даже не нужны переменные count, но вы можете использовать указатели.
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 ( журнал( н ) )переменные для хранения значений счетчика.
Так что на самом деле это не зависит от N или размер алфавита.