题目
给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
解法一
思路
- 使用数组
代码
public char findTheDifference(String s, String t) {
char[] sChars = s.toCharArray();
char[] tChars = t.toCharArray();
int[] chars = new int[26];
for (char c : sChars) {
chars[c-'a']++;
}
for (char c : tChars) {
chars[c-'a']--;
if (chars[c-'a'] < 0) {
return c;
}
}
return ' ';
}
复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)
解法二
思路
- 所有asc码就和,差值就是结果
代码
public char findTheDifference(String s, String t) {
char[] sChars = s.toCharArray();
char[] tChars = t.toCharArray();
int sSum = 0;
int tSum = 0;
for (char c : sChars) {
sSum += c;
}
for (char c : tChars) {
tSum += c;
}
return (char) (tSum - sSum);
}
// 经leet-code测试,s.charAt()这种方式耗时比较大。
复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)