使用Python查找要从字符串中删除的唯一字符数以获得字谜
Alice正在上密码学课,发现字谜非常有用。如果第一个字符串的字母可以被重新排列以形成第二个字符串,那么我们认为两个字符串是互不相同的。换句话说,两个字符串必须包含相同频率的相同字母。例如,bacdc和dcbac是字谜,但bacdc和dcbad不是 Alice决定采用一种包含两个大字符串的加密方案,其中加密取决于生成两个字符串字谜所需的最小字符删除次数。你能帮她找到这个号码吗 给定两个长度相同或不相同的字符串a和b,确定生成a和b字谜所需的最小字符删除数。可以从任一字符串中删除任何字符 例如,如果a=cde和b=dcf,我们可以从字符串a中删除e,从字符串b中删除f,这样剩下的两个字符串都是cd和dc,它们都是字谜 我试过的代码使用Python查找要从字符串中删除的唯一字符数以获得字谜,python,string,data-structures,substring,anagram,Python,String,Data Structures,Substring,Anagram,Alice正在上密码学课,发现字谜非常有用。如果第一个字符串的字母可以被重新排列以形成第二个字符串,那么我们认为两个字符串是互不相同的。换句话说,两个字符串必须包含相同频率的相同字母。例如,bacdc和dcbac是字谜,但bacdc和dcbad不是 Alice决定采用一种包含两个大字符串的加密方案,其中加密取决于生成两个字符串字谜所需的最小字符删除次数。你能帮她找到这个号码吗 给定两个长度相同或不相同的字符串a和b,确定生成a和b字谜所需的最小字符删除数。可以从任一字符串中删除任何字符 例如,如
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 该功能似乎有效。我不熟悉您写入文件的方式,请尝试使用以下方式:
fptr = open("MyFile.txt","w")
事实证明,这是两个计数器之间的对称差异。它可以更高效地直接计算,但通过计数器接口,它可以表示为
(x-y)+(y-x)
有关计数器类没有将此作为方法的原因,请参见循环底部赋值
a=0的意义是什么?无论如何,它会立即在循环的顶部被重新分配。问题有一些奇怪的句子,如,例如,if and,我们可以从string和from string中删除,这样剩下的两个字符串都是,哪些是anagram。
发生了什么事?你的具体问题是什么?你得到了什么样的输出,它是怎么错的?
a = "fcrxzwscanmligyxyvym"
b = "jxwtrhvujlmrpdoqbisbwhmgpmeoke"
from collections import Counter
x = Counter(a)
y = Counter(b)
sum(((x - y) + (y - x)).itervalues()) # => 30