晨敛清荷 2022-05-04 13:55:09
看大佬们都使用正则表达式进行匹配,小弟就不用正则来个版本
主要思路如下:
想要计算出现的次数,则需要遍历,这里通过Array.prototype.reduce方法,遍历每一个字符
题目又说是连续出现,那么只要单个字符出现2次以上,就要储存,所以这里在遍历的时候,通过reduce的第二个参数保存一个temp对象。
根据temp中该字符重复出现的次数就行逻辑判断。
如果一旦发现
temp
对象中不存在[next]属性
,则表示next并不是连续字符
,所以完全覆盖temp
对象结果出来以后,删除
strToObj
中的temp
属性。通过
Math.max
以及Object.values
方法找出最大值max
。filter
对象strToObj
,找出值等于max
的。最后在使用
reduce
拼接结果返回。
const findMaxRepeatString = str => { if (typeof str !== 'string') return {}; const strToObj = Array.prototype.reduce.call( str, (pre, next) => { let track = pre.temp[next]; if (!track) { pre.temp = { [next]: 1, }; return pre; } track = ++pre.temp[next]; if (track < 2) return pre; const v = track - (pre[next] || 0); pre[next] = v >= 1 ? track : pre[next]; return pre; }, { temp: {} } ); delete strToObj.temp; const max = Math.max(...Object.values(strToObj)); if (max < 2) return {}; return Object.keys(strToObj) .filter(key => strToObj[key] === max) .reduce((pre, key) => { pre[key] = strToObj[key]; return pre; }, {}); }; findMaxRepeatString ('aa11bbbppbbb'); // { b: 3 }
- 共 1 页
- 1
题目可以再加一个:堆叠上下文(The stacking context)
第 73 题: 介绍下 BFC、IFC、GFC 和 FFC