给出两个字符串,其中一个字符串将包含一个额外的字符。找到多余的字符。两个字符串中所有其他字符的数量将相同。检查样本输入/输出以进一步澄清。
该代码区分大小写。
输入: 两个单独的行上的两个字符串。
输出: 其中一个字符串多余一个字符
样本输入: 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))
答案 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()
函数将是最快的,如果您事先知道它只是一个字符,则在两个字符串之间会有差异。