添加一个字母变回文串

描述

给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”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. 回文串
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容