JavaScript 实现
let str = 'AAABBAACCAAAADDE' function continuousString(str) { let finalObj = {} let tempObj = {} let count = 0 for (let i = 0; i < str.length; i++) { const code = str[i] if (code === str[i + 1]) { // 初次时候,两个相等 if (!tempObj[code]) { tempObj[code] = 2 // 初次时候,两个相等就加 2 } else { tempObj[code] += 1 // 后面相等加 1 } } else { if (!finalObj[code]) { // 不相等情况 finalObj[code] = 1 // 自己加 1 } if (finalObj[code] < tempObj[code]) { // 和临时存储的数值进行对比,如果小于,则进行赋值 finalObj[code] = tempObj[code] } tempObj[code] = 0 // 设置为 0,因为连续相等这个条件已经断开了 } } console.log('finalObj :', finalObj) // finalObj : { A: 4, B: 2, C: 2, D: 2, E: 1 } for (const key in finalObj) { const item = finalObj[key] if (count < item) { count = item } } console.log('count :', count) // count : 4 return count } continuousString(str)
正则实现
let r = 'AAABBCCAAAA DDE666FF' // 匹配模式:单个字符+第一个括号中的匹配值( * —— 有零个或者多个) let match = r.match(/(\w)\1*/g) --- 正则中\1的用法---反向引用 console.log('match :', match) // match : [ 'AAA', 'BB', 'CC', 'AAAA', 'DD', 'E', '666', 'FF' ] match.sort((a, b) => { return a.length < b.length // 从大到小 }) console.log('match :', match) // match : [ 'AAAA', 'AAA', '666', 'BB', 'CC', 'DD', 'FF', 'E' ] console.log('连续相同字串长度 :', match[0].length) // 连续相同字串长度 : 4