leetcode 389. Find the Difference(python)

·  阅读 584

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战

描述

You are given two strings s and t.

String t is generated by random shuffling string s and then add one more letter at a random position.

Return the letter that was added to t.

Example 1:

Input: s = "abcd", t = "abcde"
Output: "e"
Explanation: 'e' is the letter that was added.
复制代码

Note:

0 <= s.length <= 1000
t.length == s.length + 1
s and t consist of lowercase English letters.
复制代码

解析

根据题意,给出两个字符串 s 和 t。字符串 t 是通过随机改组字符串 s 生成的,然后在随机位置再添加一个字母,返回新添加到 t 的字母。

这道题的题意简单易懂,难度也是个 Easy 级别的,但是提交错了两次,真的是尴尬。这里有一些边界条件,在 t 中新增加的字母可能是之前不存在的,也可能是之前存在的字母,所以我使用了字典来对 s 和 t 中出现的字母进行计数,然后遍历 t 中的每个元素 k 以及出现的次数 v ,如果 k 不在 s 中,说明这个字母就是 t 中新增的字母,直接返回 k 即可。如果 v 大于 s[k] ,说明这个字母在 t 中出现的次数是大于在 s 中出现的次数的,说明这个字母是 t 中新增加的字母,直接返回即可,因为正常情况一个字母在 s 中出现次数和 t 中出现的次数是一样的。

整个解法的时间复杂度是 O(N) ,空间复杂度也是 O(N) 。

解答

class Solution(object):
    def findTheDifference(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: str
        """
        s = collections.Counter(s)
        t = collections.Counter(t)
        for k, v in t.items():
            if k not in s:
                return k
            elif v>s[k]:
                return k

        	      
		
复制代码

运行结果

Runtime: 30 ms, faster than 60.88% of Python online submissions for Find the Difference.
Memory Usage: 13.3 MB, less than 93.81% of Python online submissions for Find the Difference.
复制代码

解析

当然除了上面的常规用字典计数的解法,还有其他的解法,如这里用到了异或运算,因为 t 中的字母只是比 s 中的字母多了一个新增的,所以把 s 和 t 两个字符串拼接起来,然后对所有的字母的 ascii 码进行异或运算, 那样最后得到的结果肯定是新增的那个字母的 ascii 码,再将其转化为对应的字符返回即可。

解答

class Solution(object):
    def findTheDifference(self, s, t):
        """
        :type s: str
        :type t: str
        :rtype: str
        """
        x = 0
        for c in s+t:
            x ^= ord(c)
        return chr(x)
复制代码

运行结果

Runtime: 44 ms, faster than 33.63% of Python online submissions for Find the Difference.
Memory Usage: 13.5 MB, less than 75.40% of Python online submissions for Find the Difference.
复制代码

原题链接

leetcode.com/problems/fi…

您的支持是我最大的动力

分类:
后端
收藏成功!
已添加到「」, 点击更改