简单
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例 1:
输入:s = “abaccdeff”
输出:’b’
示例 2:
输入:s = “”
输出:’ ‘
限制:
0 <= s 的长度 <= 50000
方法一:Map+两次遍历(第二遍循环的是字符串)
/**
* @param {string} s
* @return {character}
*/
var firstUniqChar = function(s) {
if(s.length==0) return ' ';
const charMap = new Map()
for(const c of s){
charMap.set(c,!charMap.has(c))
}
for(const c of s){
if(charMap.get(c)) return c
}
return ' '
};
方法二:Map+两次遍历(第二次循环的是Map)
根据MDN上面的解释,js中的Map类似于java语言中的有序哈希表,for…of之后返回一个[key,value]的数组。当字符串很长(重复字符很多)时,方法二则效率更高。
/**
* @param {string} s
* @return {character}
*/
var firstUniqChar = function(s) {
if(s.length==0) return ' ';
const charMap = new Map()
for(const c of s){
charMap.set(c,!charMap.has(c))
}
for(const item of charMap){
if(item[1]) return item[0]
}
return ' '
};
参考:
1.https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/
2.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map