驗證迴文串
題目描述
- 題目
給定一個非空字符串 s,最多刪除一個字符。判斷是否能成爲迴文字符串。
-
示例
-
示例 1:
輸入: "aba" 輸出: True
-
示例 2:
輸入: "abca" 輸出: True 解釋: 你可以刪除c字符。
-
說明
字符串只包含從 a-z 的小寫字母
解題思路
- 該題的解決方式可分爲兩種
若:迴文串中有效(特指☞需要判斷是否爲會問結構的那段字符串)字符串兩端的字符相等,接着判斷內部字符串是否爲迴文串
若:字符串兩端的字符不是迴文串的話,就將left往後移動一位進行比較或者將right往前移動一位後判斷內部是否爲迴文串
- 將left往後移動一位
- 將right 往前移動一位
代碼實現
- 迴文判斷函數
bool Palindrome(string& s,int left,int right){
while(left<right){
if(s[left]!= s[right]){
return false;
}
left++;
right--;
}
return true;
}
- 整體實現
class Solution {
public:
bool Palindrome(string& s,int left,int right){
while(left<right){
if(s[left]!= s[right]){
return false;
}
left++;
right--;
}
return true;
}
bool validPalindrome(string s) {
int left=0;
int right=s.size()-1;
while(left<right){
if(s[left]!=s[right]){
return Palindrome(s,left+1,right) || Palindrome(s,left,right-1);
}
left++;
right--;
}
return true;
}
};
- 運行結果