首页 > 试题广场 >

字符串连连看

[编程题]字符串连连看
  • 热度指数:1442 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
对于输入的字符串,从左到右扫描字符串,如果存在由三个以上(包括三个)连续相同字符组成的子串,就将这个子串从原串中去掉,并将原有字符串剩下的部分拼接到一起。重复上述过程,直到无法去掉任何子串

输入描述:
输入的字符串


输出描述:
最后剩下的子串
示例1

输入

AAABCCDDDCB

输出

BB
let s = readline()
let cnt = 1
let end = 0, start = 0
for (let i = 1; i < s.length; i++) {
  if (s.charAt(i) === s.charAt(i - 1)) {
    cnt++
    end = i
    start = end - cnt + 1
  } else {
    start = i
    cnt = 1
  }
  // console.log(s.charAt(i), cnt, start, end)
    如果这里直接用if判断,那么cnt一到三就会进入这个判断,所以结果是只删除了三个
    如果要删除三个以上,这里的分支要用 else if,并且去掉上面的else分支
  if (cnt >= 3) {
    let s1 = s.slice(0, start)
    let s2 = s.slice(end + 1, s.length)
    s = s1.concat(s2)
  //  console.log('s1:', s1)
  //  console.log('s2:', s2)
  //  console.log('s3:', s)
    cnt = 1
    i = 0
  }
}
// }

console.log(s)

发表于 2022-09-05 16:37:14 回复(0)