查找 str 中连续次数最多的字符的个数
用双指针来实现,指针在C语言当中其实指的是指向某个内存地址。在js里面可以理解成下标值,也就是用两个位置下标来实现。比如用 i 和 j 两个变量来存储。
思路:
- 刚开始时候, i指向第一下标 0,j指向i后面一个位置的下标 1。
- 遍历这个字符串。
a.和 j 指向的字符相等的时候,i下标不变,j下标向后移动。
b.i 和 j 指向的字符不相等的时候,让 i = j,j += 1。这个时候 j 减去 i 的值就是这个字符出现的次数。记录一下这个次数和字符。
(题目中要求的是输出次数最多的连续字符和次数,所以我们只需要记录最大的值就行,也就是加个判断,j - i比之前记录的值大,记录这个大值,如果比他小的话就不用记录了,最后输出这个值)
代码实现
let str = 'acadddab';
let i = 0, j = 1;
let noteNo = 0, noteChart = str[noteNo];
// 用 while 来遍历,是因为下标 i 的值可以跳跃
while(i < str.length - 1) {
//
if(str[i] == str[j]) {
j++;
} else {
// 字符连续出现的次数
let step = j - i;
if(noteNo < step) {
noteNo = step;
noteChart = str[i];
}
i = j;
j++;
}
}
console.log(noteChart, noteNo)
代码可以因为 if 和 else 里面都有 j++;所以可以优化。
while(i < str.length - 1) {
//
if(str[i] !== str[j]) {
// 字符连续出现的次数
let step = j - i;
if(noteNo < step) {
noteNo = step;
noteChart = str[i];
}
i = j;
}
j++;
}
console.log(noteChart, noteNo)