Leetcode 389 Find the Difference


Given two strings s and t which consist of only lowercase letters.

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

Find the letter that was added in t.


Example:

Input:
s = "abcd"
t = "abcde"

Output:
e

Explanation:
'e' is the letter that was added.


解一

看到题目后想到的最直接的方法。用两个数组分别记录两个字符串中每个字母出现的次数,将两个数组进行比较后,就可以知道多出来的是哪个字母。


class Solution {
public:
    char findTheDifference(string s, string t) {
        int count1[27] = {0};
        for(int i = 0; i < s.length(); i++)
            count1[s[i]-'a']++;
        for(int i = 0; i < t.length(); i++){
            if(count1[t[i]-'a'] == 0) return t[i];
            else count1[t[i]-'a']--;
        }
        return NULL;
    }
};


解二

看到题目的有一个标签是bit manipulation,所以简单搜索了一下,了解到异或运算的几个特点。

    1.交换律 a^b == b^a

    2.结合律 (a^b)^c == a^(b^c)

    3.对任意x, 都有x^x=0, x^0=x

    4.自反律 a^b^b=a^0=a

所以利用这些特点,只要将两个字符串中的每个字符进行异或,就能得到多出来的那个字母。

class Solution {
public:
    char findTheDifference(string s, string t) {
        int ans = 0;
        for(int i = 0; i < s.length(); i++)
            ans ^= (s[i]^t[i]);
        return ans^t[t.length()-1];
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值