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

leetcode每日一题:389. 找不同

作者头像
用户3578099
发布2020-12-30 11:36:55
4220
发布2020-12-30 11:36:55
举报

题目链接:

https://leetcode-cn.com/problems/find-the-difference

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

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

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

示例 1:

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

示例 2:

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

示例 3:

输入:s = "a", t = "aa"
输出:"a"

示例 4:

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

提示:

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

思路:

计数、位运算、求和

1.计数

可以先用数组统计 s 的字符出现的次数。然后开始遍历字符串 t,数组中对应字符的次数减 1。当数组中出现负数,那么代表对应的字符就是添加的字母。

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        # 长度为 26 的数组,用以统计字符出现次数
        str_count= [0] * 26
        for ch in s:
            str_count[ord(ch)-ord('a')] += 1
        for ch in t:
            str_count[ord(ch)-ord('a')] -= 1
            if str_count[ord(ch) - ord('a')] < 0:
                return ch
        return ""

2.位运算

将两个字符串拼接起来,那么就可以转化为求字符串中出现次数为奇数的字符。可以用位运算来解决这个问题。

这里再提下异或的性质:二进制位同一位相同则为 0,不同则为 1。关于异或的规律:

任何数与自身异或结果为 0。

任何数与 0 异或结果为本身。

同时,异或满足交换律、结合律(数学符号:⊕)

交换律:a ⊕ b = b ⊕ a

结合律:a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c

这里使用位运算异或具体的思路如下:

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        new_s = s + t
        ans = 0
        for ch in new_s:
            ans ^= ord(ch)
        return chr(ans)

3.求和

这里借鉴 官方题解 给出的思想。先分别计算字符串 s 和字符串 t 各个字符对应的 ASCII 码值之和。因为 t比 s 只多了一个字母,那么用 t中各个字符的 ASCII 值和减去 s 各个字符的 ASCII 值和,最终差值转换为 ASCII 字符即是所求结果

class Solution:
    def findTheDifference(self, s: str, t: str) -> str:
        add_s = 0 
        add_t = 0
        for ch in s:
            add_s += ord(ch)
        
        for ch in t:
            add_t += ord(ch)
        return chr(add_t-add_s)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技时讯 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档