题目描述
给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。
示例
示例 1:
输入: s = "aba"
输出: true
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/va…
实现
bool validPalindrome(char * s)
{
if (strlen(s) <= 2) {
return true;
}
// 左右指针夹逼,看看是否符合
int left = 0;
int right = strlen(s) - 1;
int flag = 1; // flag=1表示还有1次删除的机会
int leftFlag = true;;
int rightFlag = true;
// 遇到需要删除的情况,删除左边的
while (left < right) {
if (s[left] != s[right]) {
if (++left <= right && flag == 1) {
flag = 0;
} else {
leftFlag = false;
break;
}
} else {
left++;
right--;
}
}
left = 0;
right = strlen(s) - 1;
flag = 1;
// 遇到需要删除的情况,删除右边的
while (left < right) {
if (s[left] != s[right]) {
if (left <= --right && flag == 1) {
flag = 0;
} else {
rightFlag = false;
break;
}
} else {
left++;
right--;
}
}
if (leftFlag || rightFlag) {
return true;
}
return false;
}