前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode 每日一题:389. 找不同

leetcode 每日一题:389. 找不同

作者头像
用户7685359
发布2020-12-22 15:38:18
3260
发布2020-12-22 15:38:18
举报
文章被收录于专栏:FluentStudyFluentStudy

leetcode 每日一题:389. 找不同:https://leetcode-cn.com/problems/find-the-difference/

一起刷题吧

一、题目分析

输入:两个字符串,其中第二个字符串是第一个字符串重排后,随机在某个位置新加了一个别的字符 输出:新加入的字符 难度:简单 标签:哈希,位运算

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

示例 2: 输入:s = "", t = "y" 输出:"y"

示例 3: 输入:s = "a", t = "aa" 输出:"a"

示例 4: 输入:s = "ae", t = "aea" 输出:"a"

二、参考代码

这个题目的解法很多,一个比较直观的想法是用哈希,当然这种解法很容易,这里就不给出实现代码。另外也可以通过计数的方式做寻找,在 python 中的 collections 包下有 Counter 数据结构,它可以直接获取到每个字符出现的次数,通过比较次数的不同,也可得到最终的值。参考代码如下:

代码语言:javascript
复制
from collections import Counter

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        count_s = Counter(s)
        count_t = Counter(t)
        for c in count_t:
            if count_t[c]!=count_s[c]:
                return c

这里主要想说的一种思路是通过位运算:异或。异或的运算规则为相同则为0,不同则为1,即:

代码语言:javascript
复制
1 ^ 0 = 1
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 1 = 0

而它还有一个特性,即相同的数字异或两次则等价于没有任何操作,即:

代码语言:javascript
复制
a ^ b ^ a = b

因此对于我们这个题目可直接利用这个特性,题目转换一个,给定一个字符串,只有一个字符出现一次,其他字符都会出现偶数次,找出这个字符。利用这个特性,直接将所有结果做一个异或运算最终的结果就是我们需要值。

当然这里我们还需要知道另外一个特性,即 0 与其他任意数值做异或都等于这个数值本身,即:

代码语言:javascript
复制
0 ^ a = a

因此我们代码的初始值就可以设置为 0,参考实现代码如下:

代码语言:javascript
复制
class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        # 避免 None输入,同时解决输入为 s = "a", t = "" 这种特殊情况
        s = s or ""
        t = t or ""

        result = 0
        for c in s:
            result ^= ord(c)
        for c in t:
            result ^= ord(c)
        return chr(result)

测试用例:(注意:在很多面试时,面试官也会问你,你会写一些什么测试用例,一般是看你考虑问题的全面性,所以也要有能自己找准测试用例的能力)

代码语言:javascript
复制
s = Solution()
print(s.findTheDifference("abcd", "abcde"))
print(s.findTheDifference("abcd", "aebcd"))
print(s.findTheDifference("a", ""))

提交执行结果:

代码语言:javascript
复制
执行结果:通过 显示详情 执行用时:36 ms, 在所有 Python3 提交中击败了92.65%的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了5.13%的用户

时间上位运算还是很高效的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FluentStudy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目分析
  • 二、参考代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档