theme: channing-cyan
思路
- 可以将每个重复字母开头的字符串中的第一个保存到一个变量中 (代码中的
a
), 然后将后面的数组元素与它对比:
- 如果相同, 则计数器累加. 计数器代表的是这串重复字符串的长度
- 如果不同, 说明后面是一个新的字母了, 这时需要更新变量
a
的值, 并且记录下此时字符串数组的下标 (用来截取结束的重复字符串), 最后根据重复字符串的长度判断是否更新maxStr
的值.
- 字符串中可能会出现两串重复字母长度相等的情况, 为了避免出现这个问题, 我们可以提前声明一个备用的字符串 (代码中的
maxStrl
) 进行存储. 最后根据备用字符串的长度是否为0来判断有没有出现上述情况:
- 如果出现了, 需要同时输出
maxStr
和maxStrl
的内容 - 如果没出现, 只需要输出
maxStr
就可以
或者可以使用直接一起输出两部分的内容, maxStrl
内容为空也没什么影响.
<script>
maxr("mmmiijjjjkkkkkkssptr");
function maxr(char){
var arr = char.split("");
var maxCount=0;
var maxStr = "";
var maxStrl = ""; //如果有两个同样长的字符串, 作为备用, 存放另一个
var a; //a用来表示当前的字母
a = arr[0]; //初始化
//截取字符串
var end;
for(var i=0;i<arr.length;i++){
if(arr[i] == a){
maxCount += 1;
}
else {
end = i;
// console.log(maxCount);
var maxStr1 = char.slice(end-maxCount,end);
// console.log(maxStr);
//判断是否是最大的
if(maxStr1.length > maxStr.length){
maxStr = maxStr1;
}
//如果有两个等长的部分
else if (maxStr1.length == maxStr.length){
maxStrl = maxStr1;
}
a = arr[i];
maxCount = 1;
}
}
//判断结果输出
if(maxStrl.length == 0){
console.log(maxStr);
}
else{
console.log(maxStr);
console.log(maxStrl);
}
}
</script>
输出:
kkkkkk