Skip to content
在本页面

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

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

示例 1:

输入: s = "leetcode"
输出: 0

示例 2:

输入: s = "loveleetcode"
输出: 2

示例 3:

输入: s = "aabb"
输出: -1

提示:

  • 1 <= s.length <= 10^5
  • s 只包含小写字母

思路

创建哈希表(对象), 循环保存不重复的字符, 循环返回第一个不重复的字符, 不存在则返回-1

对象存储频次

TypeScript
function firstUniqChar(s: string): number {
    let obj = {};
    for (let i = 0; i < s.length; i++) {
        if (obj[s[i]]) obj[s[i]]++;
        else obj[s[i]] = 1
    }
    for (let i = 0; i < s.length; i++) {
        if (obj[s[i]] === 1) return i;
    }
    return -1;
};

对象存储索引

第二次遍历, 只需要找出其中不为 −1 的最小值

TypeScript
function firstUniqChar(s: string): number {
    let obj: Record<string, any> = {};
    for (let i = 0; i < s.length; i++) {
        obj[s[i]] = s[i] in obj ? -1 : i;
    }
    let arr:number[] = Object.values(obj).filter(f => f !== -1)
    return arr.length ? Math.min(...arr) : -1;
};

奇技淫巧

当前字符的第一个索引和最后一个索引相同返回即可

TypeScript
function firstUniqChar(s: string): number {
    for (let i = 0; i < s.length; i++) {
        if (s.indexOf(s[i]) === s.lastIndexOf(s[i])) return i;
    }
    return -1;
};

Released under the MIT License.