1. 题目描述

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

示例:

  1. s = "leetcode"
  2. 返回 0
  3. s = "loveleetcode"
  4. 返回 2

提示:你可以假定该字符串只包含小写字母。

2. 解题思路

最直接的方式,就是使用JavaScript的字符串方法:indexOf()lastIndexOf(),他们分别代表正向
某个元素的索引,和倒叙遍历时某元素的索引。只要这两个索引值相等,就说明该元素在字符串中不重复。

也可以使用哈希表来实现这个题:设置两次遍历,第一次将所有元素存入哈希表,key为元素值,value为元素出现的次数。第二次遍历判断那个元素是第一个不重复的元素。

3. 代码实现

第一种方法:

  1. /**
  2. * @param {string} s
  3. * @return {number}
  4. */
  5. var firstUniqChar = function(s) {
  6. for(let i = 0; i<s.length; i++){
  7. if(s.indexOf(s[i])===s.lastIndexOf(s[i])){
  8. return i
  9. }
  10. }
  11. return -1
  12. };

第二种方法:

  1. /**
  2. * @param {string} s
  3. * @return {number}
  4. */
  5. var firstUniqChar = function(s) {
  6. const hash = {}
  7. for(let i = 0; i<s.length; i++){
  8. if(!hash[s[i]]){
  9. hash[s[i]] =1
  10. }else{
  11. hash[s[i]] +=1
  12. }
  13. }
  14. for(let i =0; i<s.length; i++){
  15. if(hash[s[i]]===1){
  16. return i
  17. }
  18. }
  19. return -1
  20. };

4. 提交结果

第一种方法:
387. 字符串中的第一个唯一字符 - 图1
第二种方法:
387. 字符串中的第一个唯一字符 - 图2