🏒

剑指 Offer 50. 第一个只出现一次的字符

💚
难度: 简单

题目

剑指 Offer 50. 第一个只出现一次的字符

 
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
示例 1:
输入:s = "abaccdeff"
输出:'b'
示例 2:
输入:s = ""
输出:' '
限制:
0 <= s 的长度 <= 50000
 

思路

  1. 创建 Map 类型对象
  1. 遍历字符串, 将字符串的每个字符作为 map 的 key, 出现次数为 value
  1. 遍历 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 已经不符合要求了.