题目:
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
解析:
异或法
- 这道题和之前有一道找唯一的数字本质一样。t和s相比,多加了一个随机字符,除了这个随机字符,其他字符都应该和s中一样。换句话说,t和s总共加起来,只有那个随机字符的个数为奇数。
- 一个数字和自身做异或为0,和0做异或等于自身。
ascii码法:
- 把t的所有字符的ascii码加起来,然后减去s的ascii总和,得到的必定是那个随机字符的ascii码
当然还有一些更加笨重的办法,如用哈希表记录出现字符的次数等。
ascii法
之前也有题目是这个解法。
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
res = 0
for i in t:
res += ord(i)
for i in s:
res -= ord(i)
return chr(res)
# 等价于
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
return chr(sum(map(ord, t)) - sum(map(ord, s)))
异或法
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
res = 0
temp = s + t
for i in temp:
res ^= ord(i)
return chr(res)