给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例 1:
输入: “aba”
输出: True
示例 2:
输入: “abca”
输出: True
解释: 你可以删除c字符。
解题思路:
使用的是双指针,i=0,j=n-1,
如果字符串是回文,那么s[i]==s[j],题目中允许删除一个字符;
如果发现s[i]!=s[j]时,可以选择删除s[i]或者s[j],那么剩下的字符串要从s[i+1]到s[j]或者s[i]到s[j-1]两个区间比较,判断是否回文;
class Solution {
public:
bool delete_str(string s,int i,int j)
{
while(i<j)
{
if(s[i++]!=s[j--])
{
return false;
}
}
return true;
}
bool validPalindrome(string s) {
for(int i=0,j=s.size()-1;i<j;i++,j--)
{
if(s[i]!=s[j])
{
return delete_str(s,i+1,j)||delete_str(s,i,j-1);
}
}
return true;
}
};