389. 找不同(Python)

题目

难度:★☆☆☆☆
类型:字符串

给定两个字符串 s 和 t,它们只包含小写字母。

字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例

输入:
s = "abcd"
t = "abcde"

输出:
e

解释:
'e' 是那个被添加的字母。

解答

方案1:排序

将字符串转为列表,再将两个列表排序,同时遍历并逐一比较两个元素,t中随机插入的元素会导致中途遇到不同元素,而s中字符不同的t中的元素即为被插入到t中的元素。

class Solution(object):
    def findTheDifference(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: str
        """
        sl, tl = list(s), list(t)           # 输入字符串列表化
        sl.sort()                           # 将两个列表排序
        tl.sort()
        for c_s, c_t in zip(sl, tl):        # 遍历两个列表
            if c_s != c_t:                  # 遇到不同元素
                return c_t                  # 返回不同元素
        return tl[-1]                       # 返回最后一个

方案2:异或

我们将两个字符串合并成一个大列表,这样被插入的字符就只出现了一次,我们将列表中的每一个字符转变成为其对应的ascii码,使用【题目136. 只出现一次的数字】中的方法求出这个只出现过一次的数字,并转回到字符即可。

class Solution(object):
    def findTheDifference(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: str
        """
        char_list = list(s) + list(t)           # 输入字符串列表化并合并
        num_list = map(ord, char_list)          # 将合并后的列表中的每一个字符转换为对应的ascii码
        res = 0                                 # 最终结果
        for n in num_list:
            res ^= n
        return chr(res)                         # 将ascii转回字符

方案3:替换

class Solution:
    def findTheDifference(self, s, t):
        for c in s:
            if c in t:
               t = t.replace(c, '', 1)
        return t

如有疑问或建议,欢迎评论区留言~

你可能感兴趣的:(389. 找不同(Python))