给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
```
注意事项:您可以假定该字符串只包含小写字母。
### 解一 [暴力解法]
**思路**
使用indexOf 和lastIndexOf 来判断是否为唯一字符
**代码**
```Javascript
var firstUniqChar = function(s) {
for(let i = 0, len = s.length; i < len; ++i) {
if(s.indexOf(s[i]) == s.lastIndexOf(s[i])) return i;
}
return -1;
};
思路
两次遍历:
- 第一次遍历统计
s
中各字符出现的次数 - 第二次遍历找到第一个只出现一次的字符
代码
var firstUniqChar = function(s) {
let hash = {};
for(let i = 0; i < s.length; i++) {
hash[s[i]] = hash[s[i]] ||0;
hash[s[i]]++;
}
for(let i = 0; i < s.length; i++) {
if(hash[s[i]] == 1){
return i;
}
}
return -1;
};
思路
使用数组代替hash
由于说明了该字符串中都为小写字母 所以把s中的字符转ascii后当做索引存入到map中并统计出现次数
之后判断第一次出现次数为0的字母
代码
var firstUniqChar = function(s) {
let map = new Array(26).fill(0);
for(let i = 0; i < s.length; i++) {
map[s[i].charCodeAt()-97]++;
}
for(let i = 0; i < s.length; i++) {
if(map[s[i].charCodeAt()-97] == 1){
return i;
}
}
return -1;
};