添加一个字母变回文串

2023-06-13  本文已影响0人  斐硕人

描述

给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”,”bob”,”testset”是回文串,”alice”,”time”都不是回文串。

输入描述

一行一个有小写字母构成的字符串,字符串长度不超过10。

输出描述

如果输入字符串可以通过添加一个字符,则输出”YES”,否则输出”NO”。

解决

  1. 原字符串是不是回文串,去掉一个字母看是不是回文串
    给一个回文串在任一位置加入字母,在镜像位置加入该字母则还是回文串
let input  = readline()
let flag = false

function isPall(str){
  let theReverseStr = str.split('').reverse().join('')
  return theReverseStr == str
}

function addLetterPall(input){
  if (input.length <= 1){
    flag = true
    return
  }
  for (let i = 0; i <= input.length; i ++){
    let res = input.slice(0,i) + input.slice(i+1)
    if (isPall(res)){
      flag = true
      return
    }
  }
}

addLetterPall(input)
let output = flag ? 'Yes' : 'No'
console.log(output)
  1. 反转字符串与原字符串的最长公共子序列,计算其与原字符串的长度差,为变成回文串需要添加的字母数。复杂度n方
  2. 双指针从前后同时遍历,同则滑动否则停止,判断指针中间的字符串,去掉头尾字母中的一个后,是否是回文串

  1. 给定一个字符串,问是否能通过添加一个字母将其变为回文串
  2. 回文串
上一篇 下一篇

猜你喜欢

热点阅读