題目:
給定兩個(gè)字符串 s 和 t溶浴,它們只包含小寫字母墩衙。
字符串 t 由字符串 s 隨機(jī)重排,然后在隨機(jī)位置添加一個(gè)字母剪况。
請(qǐng)找出在 t 中被添加的字母。
示例 1:
輸入:s = "abcd", t = "abcde"
輸出:"e"
解釋:'e' 是那個(gè)被添加的字母蒲跨。
示例 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:
根據(jù)提示译断,t比s長(zhǎng)。
創(chuàng)建list或悲,遍歷t存放t中所有的字符孙咪。
遍歷s,移除s中每個(gè)字符巡语,剩余的就是不同的翎蹈。
選擇用鏈表,鏈表插入移除快男公。
代碼如下:
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評(píng)論第一個(gè)思路荤堪,真是天秀。思路提供者: 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評(píng)論某個(gè)思路澄阳,也是天秀拥知。思路提供者: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;
}
-------------------------------小白學(xué)算法