问题描述:
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
题目链接:https://leetcode-cn.com/problems/valid-palindrome-ii/
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
解题思路:
因为只是删除一个字符,按照回文字符的判断方法,多余字符可能会出现在前半部分,也有可能是后半部分,设置flag为0,遇到不相同的置1
判断s[i]==s[s.size()-1-i-flag] 和判断是s[i+flag]==s[s.size()-1-i]
代码如下:
class Solution {
public:
bool validPalindrome(string s) {
int flag = 0;
bool res1 = true;
bool res2 = true;
for(int i=0;i<s.size()/2;i++){
if(s[i]!=s[s.size()-1-i-flag] && flag==0){
flag=1;
}
if(s[i]!=s[s.size()-1-i-flag]){
res1 = false;
break;
}
}
flag = 0;
for(int i=0;i<s.size()/2;i++){
if(s[i+flag]!=s[s.size()-1-i] && flag==0){
flag=1;
}
if(s[i+flag]!=s[s.size()-1-i]){
res2 = false;
break;
}
}
return res1||res2;
}
};