题目描述:
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: s = “aba”
输出: true
示例 2:
输入: s = “abca”
输出: true
解释: 你可以删除c字符。
示例 3:
输入: s = “abc”
输出: false
提示:
1 <= s.length <= 105
s 由小写英文字母组成
代码:
class Solution {
public:
int solve(string s,int l){
for(int i=0;i<l;i++){
if(s[i]!=s[l-1-i])return i;
}
return -1;
}
bool validPalindrome(string s) {
int l=s.length();
if(l==0||l==1)return true;
int flag=0;
if(solve(s,l)==-1)return true;
else {
int index = solve(s,l);
string s1=s.substr(0,index)+s.substr(index+1);
string s2=s.substr(0,l-1-index)+s.substr(l-1-index+1);
if(solve(s1,l-1)==-1)return true;
if(solve(s2,l-1)==-1)return true;
}
return false;
}
};
就是多判断一次回文。
若字符串s不是回文,则删除不相同的元素再判断一次新的字符串是否为回文字符串。