问题: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.
Example:
Input:
s = “abcd”
t = “abcde”
Output:
e
Explanation:
‘e’ is the letter that was added.
思路:使用hashmap,计算s中每个字符出现的次数。再遍历字符串t,每遇到一个字符,将map中的值减1。如果字符不出现在map,或者计数为0,就是后来加入的字符。
public char findTheDifference(String s, String t) {
Map<Character,Integer> map = new HashMap<Character,Integer>();
for (int i = 0; i < s.length(); i++) {
if(map.get(s.charAt(i))==null){
map.put(s.charAt(i), 1);
}else{
map.put(s.charAt(i), map.get(s.charAt(i))+1);
}
}
for (int i = 0; i < t.length(); i++) {
if (!map.keySet().contains(t.charAt(i)) || map.get(t.charAt(i))<=0) {
return t.charAt(i);
}else{
map.put(t.charAt(i), map.get(t.charAt(i))-1);
}
}
return t.charAt(0);
}
收获:1 用异或。a^b^a=b,a^b^b=a,a^b^a^b=0。交换两个int,不用第三个空间的做法是:a=a^b,b=a^b,a=a^b。

500

被折叠的 条评论
为什么被折叠?



