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.翻译:
给定两个只包含小写字母的字符串s和t。字符串t是由随机顺序的字符串s,然后再添加一个字母在一个随机位置。在t找到添加的字母。
解题思路1:
可以直接用java自带的contains函数判断s中是否有这个字母。
但是这个方法仅限于添加的这个字母之前在字符串s中没有出现过(即就是针对题目给的test设计的一个投机取巧的例子),所以很显然不行。但是还是贴出来,记录一下自己的思路历程!
return的那个‘1’是随便定义的。
public char findTheDifference(String s, String t) {
for(int i = 0; i < t.length(); i++){
s.contains(String.valueOf(t.charAt(i)));
if( !s.contains(String.valueOf(t.charAt(i)))){
return t.charAt(i);
}
}
return '1';
}
解题思路2:
参考别人的思路发现可以用两个计数数组统计s和t的字母出现次数,不一样的那个就是答案。这个解题思路可以参考383.Ransom Note的思路。
public char findTheDifference(String s, String t) {
int count1[] = new int[26];
int count2[] = new int[26];
int i;
for (i = 0; i < s.length(); i++) {
count1[s.charAt(i)-'a']++;
}
for (i = 0; i < t.length(); i++) {
count2[t.charAt(i)-'a']++;
}
for (i = 0; i < 26; i++) {
if (count1[i] != count2[i])
return (char) ('a' + i);
}
return 0;
}
具体情况如下:
解题思路3:
public char findTheDifference(String s, String t) {
char tmp = 0x00;
for(int i=0;i<s.length();i++)
tmp =(char)( tmp ^ s.charAt(i));
for(int i=0;i<t.length();i++)
tmp = (char)(tmp ^ t.charAt(i));
return tmp;
}
情况跟上面差不多。