给定两个字符串s和t 它们只包含小写字母。字符串t是由s中的字母随机打乱之后在随机的一个位置添加一个字母生成的。请找出那个添加的字母。比如:s = abcdt = baedc输出:e请给出思路并提供代码Java
思路:
- 使用HashMap记录字符串s中每个字符出现的次数。
- 遍历字符串t,对于每个字符,如果在HashMap中存在并且次数大于0,则将其次数减1。
- 最后剩下的字符即为添加的字母。
代码如下:
import java.util.HashMap;
public class Solution {
public char findTheDifference(String s, String t) {
HashMap<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
for (char c : t.toCharArray()) {
if (map.containsKey(c) && map.get(c) > 0) {
map.put(c, map.get(c) - 1);
} else {
return c;
}
}
return ' ';
}
}
复杂度分析:
- 时间复杂度:遍历字符串s和t,时间复杂度为O(max(n, m)),其中n和m分别为字符串s和t的长度。
- 空间复杂度:使用了HashMap来存储字符出现的次数,空间复杂度为O(n),其中n为字符串s的长度
原文地址: https://www.cveoy.top/t/topic/ipCz 著作权归作者所有。请勿转载和采集!