问题描述
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.
解决方法
//方法1:使用异或方法
class Solution {
//7ms
public static char findTheDifference(String s, String t) {
char r=0;
for(char c:s.toCharArray()) r ^= c;
for(char c:t.toCharArray()) r ^= c;
return r;
}
}
/*方法2:首先建立大小26的数组,之后s的每一个字母对应位置加1,t的每一个字母对应位置减1,同时判断减1之后是否小于0,小于0的话就是多余的字母*/
class Solution {
//6ms
public static char findTheDifference(String s, String t)
{
int[] alpha = new int[26];
for(char c : s.toCharArray())
alpha[c - 'a']++;
for(char c: t.toCharArray())
{
if (--alpha[c - 'a'] < 0)
return c;
}
return 0;
}
}
//方法3:将t中所有的字母的ASCII相加,之后减去s中所有字母的ASCII相加,即是多余的字母.
class Solution
{
//6ms
public static char findTheDifference(String s, String t)
{
int sum = 0;
for(char c:t.toCharArray())
sum += (int)c;
for(char c:s.toCharArray())
sum -= (int)c;
return (char)sum;
}
// //以下为另一种方法
// public static char findTheDifference(String s, String t)
// {
// int num = t.charAt(s.length());//因为t比s就多一位
// for(int i=0; i<s.length(); i++)
// {
// num += t.charAt(i);
// num -= s.charAt(i);
// }
// return (char)num;
// }
}