题目:
给定一个非空字符串 s
,最多删除一个字符。判断是否能成为回文字符串。
示例 :
输入: s = "aba"
输出: true
输入: s = "abca"
输出: true
输入: s = "abc"
输出: false
题解:
使用双向指针,若当前两字符不相同,考虑删除left字符或right字符,使用substr(pos,len)。
class Solution {
public:
bool validPalindrome(string s) {
int left = 0, right = s.length() - 1;
while (left < right)
{
if (s[left] == s[right])
{
left++;
right--;
}
else
{
if (ispalindrome(s.substr(left + 1, s.length() - left * 2 - 1))
|| ispalindrome(s.substr(left, s.length() - left * 2 - 1)))
{
return true;
}
else
return false;
}
}
return true;
}
bool ispalindrome(string s)
{
int left = 0, right = s.length() - 1;
while (left < right)
{
if (s[left] != s[right])
return false;
else
{
left++;
right--;
}
}
return true;
}
};