問題描述:
給定一個非空字符串 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;
}
};