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
}