以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - JavaScript 代码题
105. 找到第一个重复的字符
一种解法是使用一个对象来记录每个字符出现的次数,并遍历字符串,查找第一个出现次数大于1的字符即可。
代码如下:
function firstDuplicate(str) {
const charCount = {};
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (charCount[char]) {
return char;
} else {
charCount[char] = 1;
}
}
return null;
}
时间复杂度为O(n),空间复杂度也为O(n),因为需要使用一个对象来存储每个字符出现的次数。
如果不想使用额外的空间,可以考虑使用双重循环,但是时间复杂度会变为O(n^2)。
改善的办法是使用一个Set数据结构,记录已经出现过的字符,遍历字符串时,如果发现当前字符已经在Set中出现过,则找到了第一个重复的字符。
代码如下:
function firstDuplicate(str) {
const charSet = new Set();
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (charSet.has(char)) {
return char;
} else {
charSet.add(char);
}
}
return null;
}
时间复杂度为O(n),空间复杂度也为O(n),但是相比于第一种解法,使用Set数据结构能够更快地查找重复字符,因此可能更优秀一些。