返回字符串中最长连续相同字串的长度---正则实现与JavaScript实现

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

 

posted @ 2019-05-14 17:17  青S衫%  阅读(1354)  评论(2编辑  收藏  举报