验证回文字符串 Ⅱ——leetcode680

验证回文字符串 Ⅱ

题目:验证回文字符串 Ⅱ

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

示例 :

输入: s = "abca"
输出: true
解释: 你可以删除c字符。

题解

方法一:贪心

class Solution {
    public boolean validPalindrome(String s) {
        int l = s.length();
        char cs[] = s.toCharArray();
        boolean flag = true;
        boolean res = true;

        for (int i = 0, j = l - 1; i <= j; i++, j--) {
            if (cs[i] != cs[j]) {
                if (flag) {
                    j++;
                    flag = false;
                } else {
                    res=false;
                    break;
                }
            }
        }
        if(!res) {
            res=true; flag=true;
            for (int i = 0, j = l - 1; i <= j; i++, j--) {
                if (cs[i] != cs[j]) {
                    if (flag) {
                        i--;
                        flag = false;
                    } else {
                        res=false;
                        break;
                    }
                }
            }
        }
        return res;
    }
}

方法二:贪心+递归

class Solution2 {
    public boolean validPalindrome(String s) {
        int l = s.length();
        char cs[] = s.toCharArray();
        int i=0,j=l-1;

        while (i<=j) {
            if(cs[i]!=cs[j]) {
                break;
            }
            i++;
            j--;
        }
        if(i>=j) return true;
        return isPalindrome(cs, i+1, j) || isPalindrome(cs, i, j-1);
    }

    public boolean isPalindrome(char[] cs, int i, int j) {
        while (i<j) {
            if(cs[i]!=cs[j])
                return false;
            i++;
            j--;
        }
        return true;
    }
}
posted @ 2022-01-28 10:24  言思宁  阅读(25)  评论(0编辑  收藏  举报