连续重复字符最多元素和次数(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 从出现次数入手,获取次数最多的,避免了元素重复出现会遗漏结果


浙公网安备 33010602011771号