题目描述
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。不能,打印"false",能,打印出回文字符串。
function isPali(str, l, r) { // 辅助函数
while (l < r) { // 指针相遇 结束循环
if (str[l] !== str[r]) { // 一票否决
return false;
}
l++; // 指针挪动,相互逼近
r--;
}
return true; // 没有遇到不同,返回true
}
function fun(str){
let l = 0, r = str.length - 1; // 头尾指针
while (l < r) {
if (str[l] !== str[r]) { // 转为判断删掉字符后的字串,是否是回文串
return isPali(str, l + 1, r) || isPali(str, l, r - 1);
}
l++;
r--;
}
return true;
}
function prin(str){
var flag=fun(str);
if(flag==false){
return 'false';
}
var len=str.length;
var res='';
for(let [i,j]=[0,len-1];i<j;i++,j--){
if(str[i]!==str[j]&&str[i]===str[j-1]&&j>=i+2){
return res=str.substring(0,i+2)+str.substring(j+1)
}
if(str[i]!==str[j]&&str[i+1]==str[j]&&j>=i+2){
return res=str.substring(0,i)+str.substring(j-1)
}
if(str[i]!==str[j]){
return res=str.substring(0,i)+str.substring(i+1)
}
}
return str;
}
console.log(prin('abbdfgda')) //false
console.log(prin('abda')) //ada