1. 题解
/**
* 给定两个字符串 s 和 t,它们只包含小写字母。
*
* 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
*
* 请找出在 t 中被添加的字母。
*
* 输入:s = "abcd", t = "abcde"
* 输出:"e"
*/
// 利用字符和的差值来识别差异字母
public static char findTheDiff(String s, String t) {
long count = 0;
int i = 0;
for (i = 0; i < s.length(); i++) {
count += t.charAt(i) - s.charAt(i);
}
count += t.charAt(i);
return (char) count;
}
// 利用相同索引累加计数,再计数--,判断是否小于0
public static char findTheDiff2(String s, String t) {
int[] counter = new int[26];
for (char c : s.toCharArray()) {
// 利用索引来计数
counter[c - 'a']++;
}
for (char c : t.toCharArray()) {
if (--counter[c - 'a'] < 0) {
return c;
}
}
return 0;
}
public static char findTheDiff3(String s, String t) {
// 利用异或的特性:参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。
// 0 异或任何数 = 任何数
// 1 异或任何数 = -(任何数取反) (取反:0变1,1变0)
// 取反:
// ~1 = - (1 + 1) = -2
// ~20 = - (20 + 1) = -21
// 任何数异或自己 = 0
// a -> 97 b -> 98 c -> 99
// s = "ab", t = "abc"
// for1:// res = 97 ^ 98
// for2: // res = 97 ^ 98 ^97 ^ 98 ^ 99 = 99
char res = 0;
// for1
for (char c : s.toCharArray()) {
// res = res ^ c
res ^= c;
}
// for2
for (char c : t.toCharArray()) {
res ^= c;
}
return res;
}
-
异或