返回字符串中最长连续相同字串的长度---正则实现与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

 

转载于:https://www.cnblogs.com/linjunfu/p/10763661.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值