680. 验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
回文字符串是判断顺序或者逆序是否是相同的
输入: s = “aba”
输出: true
这个题好适合用双指针做啊!
class Solution {
public:
bool validpalindrome(string s) {
int left = 0, right = s.length() - 1;
bool bdelete = true;
while (left <= right)
{
if (s[left] == s[right])
{
left++;
right--;
}
else if (bdelete)
{
if (s[left] == s[right - 1])//最多删一次
{
right--;
bdelete = false;
}
else
break;
}
else break;
}
return left > right;
}
};
这么搞不行,相当于只考虑了一种情况,还需要考虑其他情况
下边参考大佬的逻辑可以AC,考虑了两种情况
class Solution {
public:
bool validpalindrome(string s) {
for (int i = 0,j=s.length()-1; i < j; i++,j--)
{
if (s[i]!=s[j])
{
return ispalindrome(s.substr(i + 1, j - i)) || ispalindrome(s.substr(i, j - i));
//这里截取长度的时候脑子转不过弯,牢记substr后边的是长度,截取的长度是相同的
}
}
return true;
}
bool ispalindrome(string s)
{
int left = 0, right = s.length() - 1;
while (left < right)
{
if (s[left] == s[right])
{
left++;
right--;
}
else return false;
}
return true;
}
};