Найдите количество уникальных символов, которые нужно удалить из строки, чтобы получить Анаграмму, используя Python - PullRequest
0 голосов
/ 29 января 2020

Алиса посещает урок криптографии и находит анаграммы очень полезными. Мы считаем две строки анаграммами друг друга, если буквы первой строки можно переставить, чтобы сформировать вторую строку. Другими словами, обе строки должны содержать одинаковые точные буквы с одинаковой частотой. Например, bacd c и dcba c являются анаграммами, а bacd c и dcbad - нет.

Алиса решает на схеме шифрования, включающей две большие строки, где шифрование зависит от минимального количества удалений символов, необходимых для анаграмм двух строк. Можете ли вы помочь ей найти это число?

Учитывая две строки, a и b, которые могут иметь или не иметь одинаковую длину, определяют минимальное количество удалений символов, необходимое для создания анаграмм a и b. Любые символы могут быть удалены из любой из строк.

Например, если a = cde и b = dcf, мы можем удалить e из строки a и f из строки b, чтобы обе оставшиеся строки были cd и d c анаграммы.

Код, который я пробовал.

import math
import os
import random
import re
import sys
from collections import Counter 

# Complete the makeAnagram function below.

def makeAnagram(str1, str2):
   new= str1 + str2
   unique =[]
   z=0
   for char in new[:]:
       a = new.count(char)
       if a%2!=0 and char not in unique:
           z=z+(a%2)
           unique.append(char)
       a=0
   return z
if __name__ == '__main__':
    fptr = open(os.environ['OUTPUT_PATH'], 'w')

    a = input()

    b = input()

    res = makeAnagram(a, b)

    fptr.write(str(res) + '\n')

    fptr.close()

для ввода

fcrxzwscanmligyxyvym

jxwtrhvujlmrpdoqbisbwhmgpmeoke

Мой вывод составляет 14

В соответствии с данными ответами вывод должен быть 30.

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Оказывается, что это симметричная c разница между двумя счетчиками. Который может быть вычислен более эффективно напрямую, но через интерфейс Counter он может быть выражен как (x - y) + (y - x).

a = "fcrxzwscanmligyxyvym"
b = "jxwtrhvujlmrpdoqbisbwhmgpmeoke"

from collections import Counter

x = Counter(a)
y = Counter(b)

sum(((x - y) + (y - x)).itervalues()) # => 30

Почему класс Counter не имеет этого в качестве метода, см. Почему нет симметрии c разницы для коллекций. Счетчик?

0 голосов
/ 30 января 2020

Функция, кажется, работает. Я не знаком с тем, как вы пишете в файл, попробуйте использовать вместо этого:

fptr = open("MyFile.txt","w")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...