找不同(揪处单身狗)

题目网址:https://leetcode-cn.com/problems/find-the-difference/submissions/
给定两个字符串 s 和 t,它们只包含小写字母。

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

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

这道题有两个思路:
思路1:使用哈希表,用哈希表进行运算,遍历第一个字符串标记出现的字符数量,再遍历第二个减去出现的数量,直到,遇到0或者原哈希表就不存在的情况。

思路2:通过异或
我之前写过一篇博客,例如有一个数组{1,2,3,4,3,2,1}
有一个数字只出现1次,其余数字都是成对出现的。那么要揪出这只单身狗,我们就把数组里面的每个数字都异或一遍。
根据异或的性质,一个数异或本身得到0,一个数异或0得到本身,异或具有交换性
那么遍历一遍后,就可以得到4了

在本题同样使用,我们只需要合并两个数组,并且转成char数组,这个数组中,每个字符都有它的ASCII码,我们将它们都异或一遍,就可以揪出这个新添加的数了。
具体代码如下:

class Solution {
    public char findTheDifference(String s, String t) {
        String s3 = s + t;
        char[] arr = s3.toCharArray();
        int tmp = 0;
        for(int i = 0 ; i < arr.length; i++){
            tmp ^= arr[i];
        }
        return (char)tmp;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值