如何使用 JavaScript 查找字符串中的第一个不重复字符?

问题描述 投票:0回答:1

我正在尝试解决数据结构和算法(DSA)中的一个常见问题:使用 JavaScript 查找字符串中的第一个非重复字符。该函数应该迭代字符串并返回第一个不重复的字符。如果不存在这样的字符,则应返回

null

例如:

findFirstNonRepeatingChar("swiss"); // Output: "w"
findFirstNonRepeatingChar("aabbcc"); // Output: null
 

我尝试通过使用嵌套的

for
循环遍历字符串两次,并对照其他字符检查每个字符来解决此问题。然而,这种方法对于长字符串来说似乎效率低下,因为它的时间复杂度是 O(n²)。

我期望找到一个更优化的解决方案,可能使用像哈希图这样的数据结构来将时间复杂度降低到 O(n),但我无法想出实现。

这是我到目前为止所拥有的:

function findFirstNonRepeatingChar(str) {
    for (let i = 0; i < str.length; i++) {
        let isUnique = true;
        for (let j = 0; j < str.length; j++) {
            if (i !== j && str[i] === str[j]) {
                isUnique = false;
                break;
            }
        }
        if (isUnique) {
            return str[i];
        }
    }
    return null;
}

这适用于小输入,但对于大字符串来说会变得非常慢。我希望获得有关如何优化此解决方案的指导。

javascript string algorithm dsa
1个回答
0
投票

我会使用 Map 来计算每个字符出现的频率。 0次、1次、1次以上。

P.s.如果您的输入是 ASCII,您可以使用 array[int] 作为映射来完成。

第一遍:迭代您的输入并填充地图条目 第二遍:迭代并查找当前字符,直到找到具有“超过 1 次”地图条目的字符并将其作为结果返回。

© www.soinside.com 2019 - 2024. All rights reserved.