Skip to content

Latest commit

 

History

History
80 lines (64 loc) · 1.68 KB

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

File metadata and controls

80 lines (64 loc) · 1.68 KB

描述

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -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;
};

解二 [hash]

思路

两次遍历:

  • 第一次遍历统计 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;
};

解三 [map]

思路

使用数组代替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;
};