Минимальное количество манипуляций для анаграмм - PullRequest
0 голосов
/ 30 сентября 2018

Учитывая строку, мы должны разделить ее на две смежные подстроки, а затем определить минимальное количество символов для изменения, чтобы превратить две подстроки в анаграммы друг друга.

def anagram(s):
    flag = 0
    if len(s)%2 != 0: return -1
    else:
        temp1,temp2 = s[:len(s)//2],s[len(s)//2:]  
        temp1 = ''.join(sorted(temp1))
        temp2 = ''.join(sorted(temp2))

        for i in temp1:
            flag1 = temp2.count(i)
            if flag1>1: flag1 = 1
            else: flag1 = flag1
            flag += flag1
    return flag 

Я вродеповсюду и очень усложняет это, не понимая это правильно.Есть ли способ упростить логику?

1 Ответ

0 голосов
/ 30 сентября 2018

Чтобы найти все анаграммы слова, я использовал словарь SOWPODS.Вот ссылка для его загрузки: https://osdn.net/projects/sfnet_scrabbledict/downloads/Dictionary%20Files/sowpods.txt.gz/

def anagrams(s):
    text_file = open("sowpods.txt", "r")
    lines = text_file.readlines()
    words = [y.replace('\n','') for y in lines]
    result = [words[i] for i in range(0,len(words)-1) if ((''.join(set(sorted(s)))) == (''.join(set(sorted(words[i])))))]
    return result

В команде открытия файла предпочтительно указывать ссылку на словарь SOWPODS.

...