需要帮助以两个字符串查找额外字符

时间:2019-10-13 09:04:25

标签: python

给出两个字符串,其中一个字符串将包含一个额外的字符。找到多余的字符。两个字符串中所有其他字符的数量将相同。检查样本输入/输出以进一步澄清。

该代码区分大小写。

输入: 两个单独的行上的两个字符串。

输出: 其中一个字符串多余一个字符


样本输入: A B C D 塞达布

样本输出: e

def findExtraCharcter(strA, strB) : 
    res = 0
    for i in range(0,len(strA)) : 
        # xor with res 
        res =res ^ (ord)(strA[i]) 

    for i in range(0,len(strB)) : 
        # xor with res 
        res = res ^ (ord)(strB[i]) 

    return ((chr)(res)); 

print(findExtraCharcter(strA, strB))

2 个答案:

答案 0 :(得分:1)

尽管您有明显的作业任务,但您可能(以后)调查sets

data = "abcd cedab"

def findExtraCharacter(string):
    x, y = map(set, string.split())
    return x.symmetric_difference(y)

char =  findExtraCharacter(data)
print(char)
# => set(['e'])

答案 1 :(得分:0)

from collections import Counter 

def findExtraCharacter(s1, s2):
    c1, c2 = Counter(s1), Counter(s2)
    for k in set(c1).union(c2):
        if c1[k] != c2[k]:
            return k

此函数对每个字符串中字符的出现进行计数,并返回找到的计数在两个字符串之间有差异的第一个字符。

Count()类比纯python中字符串的正常计数要快一个数量级。 (请参见How can I count the occurrences of a list item?)。

当然,您也可以编写一个列出所有不平衡字符的函数。 它列出了较长字符串中太多的所有字符。

def findAllExtraCharacters(s1, s2):
    c1, c2 = Counter(s1), Counter(s2)
    res = [ [k]*abs(c1[k]-c2[k]) for k in set(c1).union(c2) ]
    return [x for y in res for x in y] # flattens result

findExtraCharacter()函数将是最快的,如果您事先知道它只是一个字符,则在两个字符串之间会有差异。