1. 程式人生 > 其它 >驗證迴文字串 Ⅱ——leetcode680

驗證迴文字串 Ⅱ——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;
    }
}