算法系列:字符串中的第一个唯一字符(字符串)

314 阅读1分钟

387. 字符串中的第一个唯一字符

题目描述(难度:简单)

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

示例1:

    s = "leetcode"
    返回 0.

    s = "loveleetcode",
    返回 2.

思路1:

  • 某个字符从头开始开始的索引和从尾开始找的索引如果相等,就说明这个字符只出现了一次

  • 详解

    • 1.从头到尾遍历一遍字段串;
    • 2.判断每个位置的字符的 index() 和 lastIndexOf() 的结果是否相等;

代码1

    /**
     * @param {string} s
     * @return {number}
     */
    const firstUniqChar = function (s) {
        for(let i =0;i<s.length;i++){
            if(s.indexOf(i) === s.lastIndexOf(i)){
                return i;
            }
        }
        return -1;
    };

思路2:

  • 遍历两次。第一次遍历,用一个哈希对象记录所有字符的出现次数;第二次遍历,找出哈希对象中只出现一次的字符的下标

  • 详解:

    • 1.第一次遍历,用一个哈希对象记录所有字符的出现次数;
    • 2.第二次遍历,找出哈希对象中只出现一次的字符的下标;

代码2

    /**
     * @param {string} s
     * @return {number}
     */
    const firstUniqChar = function (s) {
        let hash = {};
        for(let i = 0;i<s.length;i++){
            if(!hash[i]){
                hash[i] = 1;
            }else{
                hash[i]++
            }
        }

        for(let i =0;i<s,length;i++){
            if(hash[i]===1){
                return i;
            }
        }
        return -1;
    
    };

参考:

leetcode-cn.com/problems/fi…

101.zo.team/