leetcode 680.验证回文字符串-ⅱ(valid palindrome ii)C语言

leetcode 680.验证回文字符串-ⅱ(valid palindrome ii)C语言

    • 1.description
    • 2.solution

1.description

https://leetcode-cn.com/problems/valid-palindrome-ii/description/

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: “aba”
输出: True

示例 2:

输入: “abca”
输出: True
解释: 你可以删除c字符。

注意:

字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。

2.solution

同125题,双指针从两端靠拢,第一次遇到不同的字母时,试着分别删除左边或右边的,看是否存在使剩余的字符串为回文,如果两种情况都不行那么就不是回文。

// 检查s中的一段是否为回文
bool f(char *s, int i, int j){
    while(i < j){
        if(s[i] != s[j]){
            return false;
        }
        i++;
        j--;
    }

    return true;
}

bool validPalindrome(char * s){
    int i = 0;
    int j = strlen(s)-1;

    while(i < j){
        if(s[i] != s[j]){
            return f(s, i+1, j) || f(s, i, j-1);
        }
        i++;
        j--;
    }

    return true;
}

你可能感兴趣的:(leetcode)