和 633类似。
此类题都是收尾指针往中间,通过贪心实现。
给你一个字符串 s,最多 可以从中删除一个字符。
请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。
输入:s = "aba"
输出:true
------------------------------------------------
class Solution {
public:
bool validPalindrome(string s) {
//第一个元素指针
int slow = 0;
//最后一个元素指针
int fast = s.size() - 1;
while(slow < fast)
{
if( s[slow] == s[fast])
{
++slow;
--fast;
}
else
{
//注意不要随手写了++ 和--;提交报错吃了亏。
return DeleteOneCharResult(s,slow+1,fast) || DeleteOneCharResult(s,slow,fast-1);
}
}
return true;
}
//判断删除slow后的字符或者fast前的字符是否符合
bool DeleteOneCharResult (string s, int slow, int fast)
{
for (int i = slow,j =fast; i<j; ++i,--j)
{
if(s[i] != s[j])
{
return false;
}
}
return true;
}
};