1.题目
2.题解
2.1辅助数组
2.2异或运算
2.3求和做差
给定两个字符串 s 和 t,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例:
输入:
s = "abcd"
t = "abcde"
输出:
e
解释:
'e' 是那个被添加的字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-the-difference
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public class Solution389 {
@Test
public void test389() {
System.out.println(findTheDifference("abcd", "abcde"));
}
public char findTheDifference(String s, String t) {
int[] count = new int[26];
for (char c : s.toCharArray()) {
count[c - 'a']++;
}
for (char c : t.toCharArray()) {
if (count[c - 'a'] == 0) {
return c;
} else {
count[c - 'a']--;
}
}
return ' ';
}
}
同自身做异或运算为0,同0做异或运算为自身。
public class Solution389 {
@Test
public void test389() {
System.out.println(findTheDifference("abcd", "abcde"));
}
public char findTheDifference(String s, String t) {
int single = 0;
for (char c : s.toCharArray()) {
single ^= c;
}
for (char c : t.toCharArray()) {
single ^= c;
}
return (char) single;
}
}
两个字符串相差一个字符,因此可以对字符串各自求ASCII值和,最后相减得到差值,其对应字符即为结果。
public class Solution389 {
@Test
public void test389() {
System.out.println(findTheDifference("abcd", "abcde"));
}
public char findTheDifference(String s, String t) {
int sum = 0;
for (char c : t.toCharArray()) {
sum += c;
}
for (char c : s.toCharArray()) {
sum -= c;
}
return (char) sum;
}
}