一、设计算法:给定一个字符串s,如果该串最多删除一个字符就是一个回文, 返回1, 否则返回0
二、测试用例
Input:aba
Output:1
Input:abca
Output: 1
Input:abc
Output:0
三、思路
如果是一个字母或者两个字母,直接返回true;
否则的话用左右指针法:
l表示最左边字母的位置,r表示最右边字母的位置。
首先,当当前位置l和r位置字符相同且l!=r时,同时移动,
当不相同时,需要做出判断:
l和r-1范围的子字符串是否为回文串,和,l+1和r范围的子字符串是否为回文串。两者满足其一便返回true。
最后,字符串本身为回文串,返回true。
四、代码实现
#include<iostream>
#include<string.h>
using namespace std;
string s;
int n;
bool Judge(int l,int r){
if(n==1 || n==2) return true;
if(l>r) return false;
if(s[l]==s[r]){
if(l!=r) n=n-2;
return Judge(l+1,r-1);
}
else{
return Judge(l,r-1)||Judge(l+1,r);
}
}
int main(){
cin>>s;
n=s.length();
if(Judge(0,n-1)) cout<<"1";
else cout<<"0";
return 0;
}
五、测试