题目描述
找不同 t 字符串是 s 加一个随机字母。 输入s,\n, t
算法1
(比数值和数个数) $O(n)$
for i in range(97, 97 + 26):
if t.count(chr(i)) != s.count(chr(i)):
return chr(i)
for l in t:
if t.count(l)!= s.count(l):
return l
def findTheDifference(self, s, t):
diff = 0
for i in range(len(s)):
diff -= ord(s[i])
diff += ord(t[i])
diff += ord(t[-1])
return chr(diff)
XOR 异或
python版:
def findTheDifference(self, s, t):
code = 0
for ch in s + t:
code ^= ord(ch)
return chr(code)
c++版:
char findTheDifference(string s, string t) {
char r=0;
for(char c:s) r ^=c;
for(char c:t) r ^=c;
return r;
}
字典dict
def findTheDifference(self, s, t):
dic = {}
for ch in s:
dic[ch] = dic.get(ch, 0) + 1
for ch in t:
if dic.get(ch, 0) == 0:
return ch
else:
dic[ch] -= 1
注:dict.get(x, y)
意思在字典里找x,找不到时,一般情况(y为空时)返回None,指定y时返回y。
这里把s的每一位字符都放进了dict里,并给它指上了数值1。
后面那一行 dic[ch] -=1 是为了特例的
"a"
"aa"
之类的情况 (遍历一遍结果人家还有,因为加上的这个随机字符和第一个里的字符一样)