LC-Find the Difference

406 篇文章 0 订阅
69 篇文章 0 订阅

方法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): ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值