题目:
给定两个字符串 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 只包含小写字母
思路1:
根据提示,t比s长。
创建list,遍历t存放t中所有的字符。
遍历s,移除s中每个字符,剩余的就是不同的。
选择用链表,链表插入移除快。
代码如下:
public char findTheDifference(String s, String t) {
List<String> list = new LinkedList<String>();
for (int i = 0; i < t.length(); i++) {
list.add(t.substring(i, i + 1));
}
for (int i = 0; i < s.length(); i++) {
list.remove(s.substring(i, i + 1));
}
return list.get(0).charAt(0);
}
思路2:
参考leetcode评论第一个思路,真是天秀。思路提供者: cafeBabe
两者的差就是最终的不同字符。
代码如下:
public char findTheDifference1(String s, String t) {
int sum = t.charAt(t.length() - 1);
for (int i = 0; i < s.length(); i++) {
sum = sum + t.charAt(i) - s.charAt(i);
}
return (char) sum;
}
思路3:
参考leetcode评论某个思路,也是天秀。思路提供者:yudou
自己与自己异或等于0,0与N异或等于N。参考百度百科:异或
代码如下:
public char findTheDifference2(String s, String t) {
int sum = t.charAt(t.length() - 1);
for (int i = 0; i < s.length(); i++) {
sum = sum ^ s.charAt(i) ^ t.charAt(i);
}
return (char) sum;
}
-------------------------------小白学算法