题目:
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: "aba"
输出: True
示例 2:
输入: "abca"
输出: True
解释: 你可以删除c字符。
思路:
其实仔细分析一下问题就好,若首尾的元素相等,那么两个元素所夹的字符串是否为回文串决定了整个字符串是否为回文串。这样可以缩小我们要研究的字符串的长度。若当前字符串的首尾元素不等,那么要满足回文串的条件,必须删除首元素或者尾元素,这样我们可以判断删掉当前首元素和删掉当前尾元素时候的两个字符串是否为回文串,只要其中一个满足条件就可以。
代码:
class Solution {
private:
bool isValid(string s,int left,int right)
{
//int len = s.length();
//if (len == 0||len==1) return true;
while (left<right)
{
if (s[left] != s[right]) return false;
left++;
right--;
}
return true;
}
public:
bool validPalindrome(string s) {
int len = s.length();
if (len == 0 || len == 1) return true;
int left = 0, right = len - 1;
while (left<right)
{
if (s[left] != s[right])
return isValid(s, left, right - 1) || isValid(s, left + 1, right);
left++;
right--;
}
return true;
}
};