难度: 简单
题目
剑指 Offer 50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例 1:
输入:s = "abaccdeff"
输出:'b'
示例 2:
输入:s = ""
输出:' '
限制:
0 <= s 的长度 <= 50000
思路
- 创建 Map 类型对象
- 遍历字符串, 将字符串的每个字符作为 map 的 key, 出现次数为 value
- 遍历 Map, 如果 value 为 1, 则返回; 都不为 1, 则返回单个空字符
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。
题解
/**
* @param {string} s
* @return {character}
*/
var firstUniqChar = function(s) {
let map = new Map()
// key: char, value: char 出现的次数
for (let i = 0; i < s.length; i++) {
let value = map.get(s.charAt(i))
if (value) {
map.set(s.charAt(i), ++value)
} else {
map.set(s.charAt(i), 1)
}
}
for (let [key, value] of map) {
if (value === 1) return key
}
return ' '
};
结果
执行结果:通过
执行用时:112 ms, 在所有 JavaScript 提交中击败了63.41%的用户
内存消耗:40.7 MB, 在所有 JavaScript 提交中击败了90.50%的用户
通过测试用例:104 / 104
优化点
可以使用 Boolean 来作为 map 的值, 因为 value 大于 1 已经不符合要求了.