您的位置:首页 > Web前端

Leetcode 389 Find the Difference

2016-09-01 08:55 477 查看
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];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: