# 剑指Offer(50)第一个只出现一次的字符

在字符串s中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s只包含小写字母。

示例 1:

输入:s = "abaccdeff"
输出:'b'

示例 2:

输入:s = "" 
输出:' '

暴力枚举

  1. 统计每个字母出现的次数
  2. 第二次遍历,寻找出现1次的第一个字母 时间复杂度O(n),空间复杂度O(1)
var firstUniqChar = function(s) {
    const obj = {};
    // 首次
    for(let i = 0; i < s.length; i++){
        const key = s[i]; 
        if(!obj[key]){
            res = key; // 暂时的首次
            obj[key] = 1;
        }else{
            obj[key]++;
        }
    }
    const keys = Object.keys(obj);  // Object.keys()当键值是string类型,遍历顺序是按照加入顺序
    const item = keys.find(key => obj[key] === 1)
    return item ? item : ' ';
};

缓存

  1. 遇到第一次出现的字母,就保存起来
  2. 如果下一个字母已经被保存过,就剔除

遍历

使用api 时间复杂度O(n2)?

var firstUniqChar = function(s) {
    for(let i=0;i<s.length;i++){
        const char = s[i];
        if(s.indexOf(char) === s.lastIndexOf(char)){
            return char;
        }
    }
    return " "
};
上次更新于: 3/23/2022, 10:11:04 AM