版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/majichen95/article/details/82796205
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.
样例
Input:
s = "abcd"
t = "abcde"
Output:
e
Explanation:
'e' is the letter that was added.
解题思路1:
直观的思路就是用map。
public class Solution {
/**
* @param s: a string
* @param t: a string
* @return: the letter that was added in t
*/
public char findTheDifference(String s, String t) {
// Write your code here
Map<Character,Integer> map = new HashMap<>();
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.containsKey(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 'a';
}
}
解题思路2:
我们也可以使用位操作Bit Manipulation来做,利用异或的性质,相同位返回0,这样相同的字符都抵消了,剩下的就是后加的那个字符,参见代码如下:
public class Solution {
/**
* @param s: a string
* @param t: a string
* @return: the letter that was added in t
*/
public char findTheDifference(String s, String t) {
// Write your code here
char res = 0;
for(char c : s.toCharArray())
res ^= c;
for(char c : t.toCharArray())
res ^= c;
return res;
}
}