680. 验证回文字符串 Ⅱ

192 阅读1分钟

题目描述

给定一个非空字符串 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;
}