2020/12/23 每日一题 字符串中的第一个唯一字符

LeetCode上387. 字符串中的第一个唯一字符,手写记录。
思路是遍历整个字符串,这里使用了ES6的map数据结构,是类似于对象的数据结构,通过set\get方法可以快速设置键值对,has方法也可以快速判断,对于这个题还是很好用的。
第二个循环使用了break关键字,可以跳出所在的当前整个循环,到外层代码继续执行。

     var firstUniqChar = function(s) {
        // 用于保存每个字符出现多少次的对象
        let ans = new Map()
        // 字符串长度
        let length = s.length
        // 应该返回index
        let index = -1
        for(let i = 0; i < length; i++) {
           if(ans.has(s[i])) {
             // 如果这个数据不是第一次出现,就将value设为-1,表示出现1次以上
             ans.set(s[i], -1)
           } else {
             // 如果这个数据不存在,就将他的value设为他出现的index
             ans.set(s[i],i)
           }
        }
        // 循环检索ans中的数据
        for(let j = 0; j < length; j++) {
           if(ans.get(s[j]) !== -1 ) {
              // 保存第一个出现非-1的index
              index = j
              // 当出现第一个了之后就跳出循环
              break
           }
        } 
        // 返回index,如果上面循环出了结果那么就是一个index,如果上面都没有结果就返回-1
        return index
     }

你可能感兴趣的:(2020/12/23 每日一题 字符串中的第一个唯一字符)