方法1:
class Solution(object):
def findTheDifference(self, s, t):
s1 , t1 = [], []
a , z = ord('a'), ord('z')
for i in [chr(x) for x in range(a, z+1)]:
s1.append(s.count(i))
t1.append(t.count(i))
for i in range(26):
if s1[i] != t1[i]:
return chr(a+i)
Sol = Solution()
print Sol.findTheDifference('abcd','abcde')
方法2:
class Solution(object):
"""
difference
"""
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)
方法3:
class Solution(object):
"""
xor
"""
def findTheDifference(self, s, t):
code = 0
for ch in s + t:
code ^= ord(ch)
return chr(code)
0,方法1是个人写的,方法2和3是他人的。
1,在第一种方法里,主要是记录s和t中出现的各个字母的个数,然后对出现字母的个数进行统计,比较不同的次数,即为t中多出的字母。这种方法效率不是太高。
在这里,首先是将s和t中的每个字母出现的次数利用count函数来进行了计数。这里用到了ord函数。
ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。
也就是说,ord(‘a’) = 97
2,在方法2中,本质上和方法1有些类似的地方。因为t是有s的所有字母构成且多一个字母,因此利用ord来计算s和t所有的ASCII的值的和的之间的差值,就可以得出t比s多的ASCII的值,也就是t比s多的字母是哪一位字母。
3,在方法3中,和以前做过的一道LC题目很类似,用到的是异或的方法。这种方法对于比较两个长字符串的不同有很高的效率。需要注意的是异或的对象为数字,因此需要提前将字符传唤为ASCII值,也就是ord函数的使用。
异或符号(XOR): ^