680. 验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: s = “aba”
输出: true
示例 2:
输入: s = “abca”
输出: true
解释: 你可以删除c字符。
示例 3:
输入: s = “abc”
输出: false
思路:
使用双指针,左端等于右端时,同时往里移动。
允许删除一个相当于左端或右端可跳过一次。
所以设置两个检查变量,当左右两端不相等时,分别只移动一个,同时改变检测变量。
若两个检查变量有一个不超过一即可。
代码如下:
class Solution {
public:
bool validPalindrome(string s) {
int a=0;
int b=s.length()-1;
int wr=0;
while(a<=b){
if(s[a]==s[b]){
a++;
b--;
}
else if(s[a]!=s[b]){
a++;
wr++;
}
if(wr>1){
break;
}
}
a=0;
b=s.length()-1;
int wb=0;
while(a<=b){
if(s[a]==s[b]){
a++;
b--;
}
else if(s[a]!=s[b]){
b--;
wb++;
}
if(wb>1){
// cout<<"here_2"<<endl;
break;
}
}
if(wr<=1||wb<=1)
return true;
else return false;
}
};