找出字符串中连续出现最多的字符和个数
题目描述
找出字符串中连续出现最多的字符和个数。
"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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论