思路
因为只能删除一个,所以采用双指针,找到第一个不一样的地方,然后考虑删除左边还是右边即可
C++
class Solution {
public:
bool validPalindrome(string s) {
if(s.size()==1)return 1;
int l=0,r=s.size()-1;
while(l<=r){
if(s[l]!=s[r]){
int ll = l++;
int rr = r--;
bool flag1 = true;
bool flag2 = true;
while(ll<=r){
if(s[ll]!=s[r]){
flag1=0;
break;
}else {
ll++;
r--;
}
}
while(l<=rr){
if(s[l]!=s[rr]){
flag2=0;
break;
}else{
l++;
rr--;
}
}
return flag1|flag2;
}else{
l++;
r--;
}
}
return true;
}
};
java
class Solution {
public boolean check(String s,int l,int r){
while(l<r){
if(s.charAt(l)!=s.charAt(r))return false;
else{
l++;
r--;
}
}
return true;
}
public boolean validPalindrome(String s) {
int l = 0,r=s.length()-1;
while(l<r){
if(s.charAt(l)!=s.charAt(r)){
return check(s,l+1,r)|check(s,l,r-1);
}else{
l++;
r--;
}
}
return true;
}
}