找出字符串中连续出现最多的字符和个数

发布于 2023-03-06 22:49:19 字数 1147 浏览 66 评论 0

题目描述

找出字符串中连续出现最多的字符和个数。

"abcaakjbb" => {"a":2,"b":2 }
"abbkejsbcccwqaa" => {"c":3 }

思路

连续的题目有一些比较通用的思路,就是不断和前面或者后面的元素进行比较, 然后不断更新结果。我们来试着简化一下题目来发现一下本质问题, 我们把题目改成找出字符串中连续出现字符最多的个数

我们可以写出如下代码:

function MRC(str) {
  if (str.length === 0) return 0;
  let max = 1;
  let count = 1;

  for (let i = 1; i < str.length; i++) {
    if (str[i] === str[i - 1]) {
      count++;
    } else {
      max = Math.max(max, count);
      count = 1;
    }
  }

  return max;
}

我们继续将这个 pattern 扩展到题目就很容易写出类似下面的代码:

参考代码

function MRC(str) {
  if (str.length === 0) return {};
  str = str + "$";
  let count = (max = 1);
  let maxKeys = [str[0]];

  for (let i = 1; i < str.length; i++) {
    const pre = str[i - 1];
    if (str[i] === pre) {
      count++;
    } else {
      if (count > max) {
        maxKeys = [pre];
        max = count;
      } else if (count === max) {
        maxKeys.push(pre);
      }
      count = 1;
    }
  }

  return maxKeys.reduce((acc, k) => ((acc[k] = max), acc), {});
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

巾帼英雄

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文