1. 程式人生 > >[Leetcode] 680. 驗證迴文字串 Ⅱ

[Leetcode] 680. 驗證迴文字串 Ⅱ

題目描述:

給定一個非空字串 s最多刪除一個字元。判斷是否能成為迴文字串。

示例 1:

輸入: "aba"
輸出: True

示例 2:

輸入: "abca"
輸出: True
解釋: 你可以刪除c字元。

注意:

  1. 字串只包含從 a-z 的小寫字母。字串的最大長度是50000。

解題思路:

相比於普通的迴文字串這裡就多了一個限制條件就是可以刪除一個字元,思路是這樣的:

依然使用雙指標方法比較頭尾字串,如果遇到不等的,不是直接返回而是嘗試跳過這個字元比較後面的,並且記錄下來已經出過錯了,在出錯就要返回false了,如果沒出錯就返回true嘛。

還有一種情況要考慮,就是人家本來就不需要刪除字元的,也就是說本來就是個標準的迴文,那麼直接返回true就好啦。

程式碼實現(Java語言):

class Solution {
    public boolean validPalindrome(String s) {
        int i = 0,j = s.length() - 1;
        char[] chars = s.toCharArray();
        boolean firstTime = false;
        while(i < j){
            if(chars[i] != chars[j]){
                if(judge(chars,i+1,j)){
                    return true;
                }else if(judge(chars,i,j-1)){
                    return true;
                }else
                    return false;
            }else{
                i++;
                j--;
            }
        }
        return true;
    }
    public boolean judge(char[] chars,int start,int end){
        while(start < end){
            if(chars[start] != chars[end])
                return false;
            start++;
            end--;
        }
        return true;
    }
}