求出字符串只是出现一次的字符,其他字符串有可能出现多次,如果找不到,就返回" "
下面是一个十分好理解的代码,请看注释
var firstUniqChar = function(s) {
if(!s){//如果是空字符 则返回空字符穿
return " "
}
var obj ={}
var hArr = []//黑名单
for(var i =0;i<s.length;i++){
if(obj[s[i]] === undefined && !hArr.includes(s[i])){// 录入obj内的key 不能是黑名单内的key
obj[s[i]] = 1
}else{
delete obj[s[i]] // 删除不符合要求的key
hArr.push(s[i]) // 出现两次了 里面进入黑名单
}
}
var arr = Object.keys(obj) // 如果都是重复的字符串,则没有符合要求的key
if(arr.length){ // 有符合要求的 则返回第一个
return Object.keys(obj)[0]
}else{// 没有返回的 则返回空字符串
return " "
}
};
方法二 使用Map结构 下面是Set 和 Map学习图片 可以先学习下
代码实现如下
const firstUniqChar = str => {
if (!str) return ' ';
const m = new Map();
for (const s of str) { // 字符串的for-of循环
m.set(s, (m.get(s) || 0) + 1);
}
for (const s of m) { // Map结构的for-of循环 s结构为[key,value]
if (s[1] === 1) return s[0];
}
return ' ';
};