给定两个字符串 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 只包含小写字母
方法一:计数
首先遍历字符串 s,对其中的每个字符都将计数值加 1;然后遍历字符串 tt,对其中的每个字符都将计数值减 11。当发现某个字符计数值为负数时,说明该字符在字符串 tt 中出现的次数大于在字符串 ss 中出现的次数,因此该字符为被添加的字符。
方法二:求和
将字符串 s 中每个字符的 ASCII 码的值求和,得到对字符串 t 同样的方法得到 两者的差值 即代表了被添加的字符。
public class Solution {
public char FindTheDifference(string s, string t) {
int snum = 0, tnum = 0;
for (int i = 0; i < s.Length; ++i) {
snum += s[i];
}
for (int i = 0; i < t.Length; ++i) {
tnum += t[i];
}
return (char) (tnum - snum);
}
}
方法三:位运算
如果将两个字符串拼接成一个字符串,则问题转换成求字符串中出现奇数次的字符。,我们使用位运算的技巧解决本题。
public class Solution {
public char FindTheDifference(string s, string t) {
int ret = 0;
for (int i = 0; i < s.Length; ++i) {
ret ^= s[i];
}
for (int i = 0; i < t.Length; ++i) {
ret ^= t[i];
}
return (char) ret;
}
}