字符串中的第一个唯一字符
给定一个字符串
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;
};