找不同(Python)

1.题目描述

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

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

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

示例1:

输入:s = "abcd", t = "abcde"
输出:"e"
解释:'e' 是那个被添加的字母。

示例2:

输入:s = "", t = "y"
输出:"y"

提示:

  • 0 <= s.length <= 1000
  • t.length == s.length + 1
  • s 和 t 只包含小写字母

2.题目求解

解法一:

class Solution(object):
    def findTheDifference(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: str
        """
        return list(Counter(t)-Counter(s))[0]

该方法使用两个 Counter 对象分别统计字符串 s 和 t 中每个字符的出现次数,然后计算它们之间的差异。

counter_t = Counter(t) # {'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1},counter_s = Counter(s) # {'a': 1, 'b': 1, 'c': 1, 'd': 1},,Counter(t) - Counter(s) 的结果是两个字典的差异,即按键进行对比,将计数结果减去相同键的值:diff_counter = counter_t - counter_s # {'e': 1}。

另外,对于Counter(t)==Counter(s)的比较,只要字母出现次数相同,那么结果就是True,因为字典是无序的。

list(Counter(t) - Counter(s)) 表示将 Counter(t) - Counter(s) 的结果转换为一个列表。在将一个字典对象转换为列表时,会只保留字典的键,并将这些键放入列表中。

解法二:

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        return chr(sum(map(ord, t)) - sum(map(ord, s)))

该解法的思路是:

  1. 计算 s、t 中所有字符的 ASCII 码值之和,方法为将字符串中每个字符转换为 ASCII 码值并求和。

  2. 将 t 的 ASCII 码值之和减去 s 的 ASCII 码值之和,差值即为添加的字符的 ASCII 码值。

  3. 将差值对应的 ASCII 码值转换为字符,即为添加的那个字符。

其中,ord(c) 是 Python 内置函数,用于返回一个字符 c 的 ASCII 码值。chr(n) 是 Python 内置函数,用于返回指定整数 n 所对应的字符。map(ord, t) 是一个函数调用,ord 是 Python 内置函数,用于返回一个字符的 ASCII 码值。

请注意,这解法的前提是在原字符串 s 的基础上,仅添加了一个字符,并且添加的字符出现了一次。如果添加了多个字符,或者添加的字符出现了多次,就需要另寻他法了。

你可能感兴趣的:(算法刷题记录,python,算法,力扣)