思路:根据题目可知,字符串t中的字符比s多一个字符,第一种情况:该字符可能是s中已经存在的,第二种情况:该字符也有可能是s中不存在的(错误解法:统计s之后,直接判断t中的字符在s统计的数中为0的那个字符为需要找的字符,这里只考虑到了第一种情况)
方法一:
1.使用字典统计s中每个字符的个数
2.循环字符串t,将字符串t中每个字符的数量与统计的s的数量对立(此处使用减法相对快速)
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
my_dict = collections.Counter(s)
for i in t:
# if t.count(i) != my_dict[i]:
# return i
my_dict[i] -= 1
if my_dict[i] < 0:
return i
return ""
方法二:
1.使用列表统计s中字符的个数
2.循环字符串t,将字符串t中每个字符的数量与统计的s的数量对立(此处使用减法相对快速)
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
my_list = [0] * 26
for i in s:
my_list[ord(i) - ord('a')] += 1
for j in t:
# if t.count(j) != my_list[ord(j) - ord('a')]:
# return j
my_list[ord(j) - ord('a')] -= 1
if my_list[ord(j) - ord('a')] < 0:
return j
return ""
方法三:求和
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
n = 0
m = 0
for i in s:
n += ord(i)
for j in t:
m += ord(j)
return chr(m - n)
方法四:位运算
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
#位运算
ret = 0
for i in s:
ret ^= ord(i)
for j in t:
ret ^= ord(j)
return chr(ret)