leetcode#680-验证回文字符串

按照题意理解即可

题目描述

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

示例 1:

输入: s = “aba”
输出: true
示例 2:

输入: s = “abca”
输出: true
解释: 你可以删除c字符。
示例 3:

输入: s = “abc”
输出: false

思路

题目中给定的条件是,最多删除一个字符,判断是不是回文串;

先正常判断s是不是回文串,然后当遇到第一对不一样的字符串时,去掉左边判断是否是回文串,再去掉右边再判断是不是回文串

如果有一个是,那就是成立的,如果去掉左边和去掉右边判断都不是回文串,那就不满足题意,返回false即可

代码

Java

public boolean isPalindrome(String s, int i, int j) {
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }

    public boolean validPalindrome(String s) {
        int i = 0;
        int j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) != s.charAt(j)) {
                return isPalindrome(s, i+1, j) || isPalindrome(s, i, j-1);
            }
            i++;
            j--;
        }
        return true;
    }

leetcode#680-验证回文字符串
https://www.powercheng.fun/articles/d43198d8/
作者
powercheng
发布于
2021年12月24日
许可协议