LeetCode680. 验证回文字符串 Ⅱ
class Solution {
public :
bool validPalindrome ( string s) {
int len = ( int ) s. length ( ) ;
if ( len <= 1 ) return true ;
int left = 0 ;
int right = len - 1 ;
while ( left < right) {
if ( s[ left] != s[ right] ) {
int l1 = left + 1 , r1 = right;
bool flag1 = true ;
while ( l1 < r1) {
if ( s[ l1] != s[ r1] ) {
flag1 = false ;
break ;
}
l1++ ;
r1-- ;
}
int l2 = left, r2 = right - 1 ;
bool flag2 = true ;
while ( l2 < r2) {
if ( s[ l2] != s[ r2] ) {
flag2 = false ;
break ;
}
l2++ ;
r2-- ;
}
return flag1 || flag2;
}
left++ ;
right-- ;
}
return true ;
}
} ;
递归
class Solution {
public :
bool validPalindrome ( string s) {
int len = ( int ) s. length ( ) ;
if ( len <= 1 ) return true ;
int left = 0 ;
int right = len - 1 ;
return helper ( left, right, s, false ) ;
}
private :
bool helper ( int left, int right, const string& s, bool flag) {
if ( left >= right) return true ;
if ( s[ left] == s[ right] ) {
return helper ( left + 1 , right - 1 , s, flag) ;
} else {
if ( flag) return false ;
flag = true ;
return helper ( left + 1 , right, s, flag) || helper ( left, right - 1 , s, flag) ;
}
}
} ;