LeetCode 389. Find the Difference 题解(C++)
题目描述
- 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.
示例
Input:
s = “abcd”
t = “abcde”Output:
eExplanation:’e’ is the letter that was added.
思路
- 设置一个由26个int类型的元素组成的数组,用来记录字符串s中出现的每个字符的次数,比如出现a,则对应数组下标为0里的数值加1;
- 遍历字符串s,并记录每个字符出现的次数,之后遍历字符串t,若对应字符下标位置的数值为0,则记录该字符,并退出循环,否则,则将该下标的数值减1。
代码
class Solution
{
public:
char findTheDifference(string s, string t)
{
int cSum[26] = {0};
int temp = 0;
char c;
for (int i = 0; i < s. size(); ++i)
{
temp = s[i] - 'a';
++cSum[temp];
}
for (int i = 0; i < t.size(); ++i)
{
temp = t[i] - 'a';
if (cSum[temp] == 0)
{
c = t[i];
break;
}
--cSum[temp];
}
return c;
}
};
补充
- 这里也可以使用异或位运算符来进行。
class Solution
{
public:
char findTheDifference(string s, string t)
{
char c = 0;
for (int i = 0 ; i < s.size(); ++i)
{
c ^= s[i];
c ^= t[i];
}
c ^= t[t.size() - 1];
return c;
}
};