连续重复字符最多元素和次数(JS)

(算法苦手👀)

实现一个函数:输入是一个字符串,输出字符串中连续重复出现次数最多的字符和次数,假设只有一个字符出现的次数最多

(例子:输入14444112442aa44442244311222222244445444243334444ccc4444, 输出应该是2和7,因为2连续重复出现了7次)

原题的用例,很独特。

function fn() {

   let a = 0, b = 1;
   let num = 1;
   let obj1 = {}; //用来记录每一个字符及其出现的次数
  
   for (let i = 0; i < str.length; i++) {
     if (str[b] === str[a]) {
       num += 1;
     } else {
       obj1[str[a]] = num;
       a = b;
       num = 1;
     }
     b += 1;
   }
   
   let count = 0;
   let res = 0;
   for (let i in obj1) {
     if (obj1[i] > count) {
       count = obj1[i];
       res = i;
     }
   }
   console.log(res, count);
 }
 let str = '14444112442aa44442244311222222244445444243334444ccc4444';

 fn(str);//4,4 
  • 调试发现只存储了第一次出现的元素和其次数
  • 转变思路,从次数比较,得到结果;改变字符串,防止遗漏结果
function fn() {
    let str = '14444112442aa44442244311222222244445444243334444ccc4444';
    //let str = '1444411244444442aa44442244311222222244445444243334444ccc4444'; 

    let a = 0;
    let b = 1;
    let count = 0;
    let res = '';
    let res2 = ''; //备用防止遗漏结果
    
    while (a < str.length - 1) {
      if (str[a] !== str[b]) {
        if (( b - a) > count) {
          count = b - a;
          res = str[a];
          res2 = ''; //前面出现了两次4444,如果后面有大于4次,要把存储了备用的置空
        }else if((b - a) === count){
            count = b-a ;
            res2 = str[a];
        }
        a = b;
      }
      b++;
    }
    if(res2.length!==0){
        console.log(res2,count);
    }
    
    console.log(res,count);

  }
  fn();//2,7 从出现次数入手,获取次数最多的,避免了元素重复出现会遗漏结果

posted @ 2022-05-11 20:15  Clematis  阅读(299)  评论(0)    收藏  举报