前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法—第一个只出现一次的字符

算法—第一个只出现一次的字符

作者头像
OBKoro1
发布2020-10-27 11:56:25
4870
发布2020-10-27 11:56:25
举报

第一个只出现一次的字符

难度:简单

描述:

给出一个字符串,找出第一个只出现一次的字符。

样例:

对于 aabc, b为第一个只出现一次的字符.

对于 abaccdeff, b为第一个只出现一次的字符.

思路分析:

可以用对象保存字符出现的次数。

代码模板:

代码语言:javascript
复制
const firstUniqChar = function(str) {};

想一想再看答案

想一想再看答案

想一想再看答案

代码:

  1. 将值删除,用 indexOf 查找还有没有相同字符,并查找之前删过的字符
代码语言:javascript
复制
const firstUniqChar = function(str) {
  str = [...str];
  let num = str.length; // 保存遍历次数
  let obj = {}; // 保存被删元素
  for (let i = 0; i < num; i++) {
    let item = str.splice(0, 1)[0]; // 删除第一个值
    if (str.indexOf(item) === -1 && obj[item] === undefined) {
      // 当前数组中没有 并且对象中也没有
      return item; // 找到
    } else {
      obj[item] = item; // 出现的字符串,用对象保存起来。
    }
  }
};
console.log('输出:', firstUniqChar('abaccdeff'), firstUniqChar('aabc'));
  1. indexOf 的第二个参数,从当前值往后搜索,并查找之前已经查过的字符 想起了indexOf的第二个参数,省了一步删除的操作。
代码语言:javascript
复制
const firstUniqChar = function(str) {
  str = [...str];
  let obj = {};
  for (let [index, key] of str.entries()) {
    if (str.indexOf(key, index + 1) === -1 && obj[key] === undefined) {
      // 跳过这个元素,当后面没有 并且前面也没有
      return key; // 找到
    } else {
      obj[key] = key; // 前面出现过 存起来
    }
  }
};
console.log('输出:', firstUniqChar('abaccdeff'), firstUniqChar('aabc'));
  1. 记录字符出现的次数,遍历字符串,第一个只出现一次的字符,就是要找的值。
代码语言:javascript
复制
const firstUniqChar = function(str) {
  var obj = {}; // 用对象
  for (var i = 0; i < str.length; i++) {
    var code = str.charCodeAt(i);
    // 记录出现的次数
    if (obj[code] == undefined) {
      obj[code] = 1;
    } else {
      obj[code]++;
    }
  }
  for (var i = 0; i < str.length; i++) {
    // 遍历字符串出现的顺序(保证第一次出现重复),当出现为1时,即找到
    if (obj[str.charCodeAt(i)] == 1) {
      return str.charAt(i);
    }
  }
  return null;
};

鼓励我一下:

觉得还不错的话,给我的项目点个star吧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个只出现一次的字符
    • 难度:简单
      • 描述:
        • 样例:
          • 思路分析:
            • 代码模板:
              • 想一想再看答案
                • 想一想再看答案
                  • 想一想再看答案
                    • 代码:
                      • 鼓励我一下:
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档