问题:
给定两个字符串 s
和 t
,它们只包含小写字母。
字符串 t
由字符串 s
随机重排,然后在随机位置添加一个字母。
请找出在 t
中被添加的字母。
思路:
首先拿到这个题目,有点疑惑问题中给的示例是
示例 1:
输入:s = "abcd", t = "abcde" 输出:"e" 解释:'e' 是那个被添加的字母。
示例 2:
输入:s = "", t = "y" 输出:"y"
可是随机重排不是可能会改变顺序的吗,随机添加不是也不一定在字符串末尾吗
我的想法是先找到t中的一个字母,然后一个一个在s中寻找,可能需要两层循环
但是根据题解,发现还有两种方法,分别是计数法和异或法。
实现:
计数法:
class Solution {
public char findTheDifference(String s, String t) {
int[] cnt = new int[26];
for(int i = 0; i<s.length(); ++i) {
char ch = s.charAt(i);
cnt[ch - 'a']++;
}
for (int i = 0; i < t.length(); ++i){
char ch = t.charAt(i);
cnt[ch - 'a']--;
if(cnt[ch - 'a'] < 0){
return ch;
}
}
return ' ';
}
}
异或法:
class Solution {
public char findTheDifference(String s, String t) {
char res = 0;
for (char c: s.toCharArray()) {
res ^= c;
}
for (char c: t.toCharArray()) {
res ^= c;
}
return res;
}
}
其中res ^= c就相当于res = res ^ c,^是异或的意思
toCharArray是返回一个字符数组,方便遍历
反思:
感觉主要还是一些方法不知道,需要记一些函数,而且解决问题思路过于死板