LeetCode 387 :字符串中的第一个唯一字符 - 哈希表

146 阅读1分钟

看到评论里一句很经典的话:和出现次数有关的,不要犹豫直接hash

上题目:

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

示例:

s = "leetcode"
返回 0

s = "loveleetcode"
返回 2

提示:你可以假定该字符串只包含小写字母

今天刚去复习了一下什么是hash表

bilibili-5分钟学会哈希表

简而言之,hash表就是带有索引的数组,可以让我们更快的查找到所需的信息,也能很大程度上的简化算法的时间复杂度。

hash表被称之为表,当然也可以是二维的。但通常情况下一维就够了。

以此题为例:我们要寻找string中的第一个不重复的字符。题目经过简化后只出现小写字母。所以只要知道string中出现过的每一个字符的出现次数就可以了。

老规矩先for循环遍历每一个字符。每遍历一个我们就要把遍历到的字符的出现加一。第一遍遍历完后就可以知道在这个字符串里出现过的所有字符各出现了多少次了。

第二遍遍历,在刚才创建的哈希表中找出只出现一次的第一个字符

var firstUniqChar = function(s) {
    const counts = new Array(26).fill(0); //26个字母
    //第一遍遍历,记录出现次数
    for(let i=0;i<s.length;i++){
        counts[s.charCodeAt(i)-97]++;
    }
    //第二遍遍历,找出只出现一次的第一个字符
    for(let i=0;i<s.length;i++){
        if(counts[s.charCodeAt(i)-97]===1){
            return i;
        }
    }
    return -1;
};