描述
给定一个字符串,问是否能够通过添加一个字母将其变成“回文串”。 “回文串”是指正着和反着读都一样的字符串。如:”aa”,”bob”,”testset”是回文串,”alice”,”time”都不是回文串。
输入描述
一行一个有小写字母构成的字符串,字符串长度不超过10。
输出描述
如果输入字符串可以通过添加一个字符,则输出”YES”,否则输出”NO”。
解决
- 原字符串是不是回文串,去掉一个字母看是不是回文串
给一个回文串在任一位置加入字母,在镜像位置加入该字母则还是回文串
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)
- 反转字符串与原字符串的最长公共子序列,计算其与原字符串的长度差,为变成回文串需要添加的字母数。复杂度n方
- 双指针从前后同时遍历,同则滑动否则停止,判断指针中间的字符串,去掉头尾字母中的一个后,是否是回文串