js查找 str 中连续次数最多的字符的个数

91 阅读1分钟

查找 str 中连续次数最多的字符的个数

用双指针来实现,指针在C语言当中其实指的是指向某个内存地址。在js里面可以理解成下标值,也就是用两个位置下标来实现。比如用 i 和 j 两个变量来存储。

思路:

  1. 刚开始时候, i指向第一下标 0,j指向i后面一个位置的下标 1。
  2. 遍历这个字符串。
    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)