1. 程式人生 > 其它 >leetcode 680. Valid Palindrome II 驗證迴文字串 Ⅱ

leetcode 680. Valid Palindrome II 驗證迴文字串 Ⅱ

一、題目大意

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

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

輸入: s = "aba"
輸出: true

示例 2:

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

示例 3:

輸入: s = "abc"
輸出: false

提示:

  1. 1 <= s.length <= 105
  2. s 由小寫英文字母組成

二、解題思路

解決兩個問題就能解決了,首先要如何判斷迴文字串,這個用雙指標思路就可以,其次要刪除哪個字元

三、解題方法

3.1 Java實現

public class Solution {
    int pos = 0;

    public boolean validPalindrome(String s) {
        boolean valid = isPalindrome(s);
        if (!valid) {
            int left = pos;
            int right = s.length() - pos;
            boolean ret1 = isPalindrome(s.substring(left + 1, right));
            boolean ret2 = isPalindrome(s.substring(left, right - 1));
            valid = ret1 || ret2;
        }
        return valid;
    }

    private boolean isPalindrome(String s) {
        int left = 0;
        int right = s.length() - 1;
        while (left < right) {
            if (s.charAt(left) == s.charAt(right)) {
                left++;
                right--;
                continue;
            }
            pos = left;
            return false;
        }
        return true;
    }
}

四、總結小記

  • 2022/5/18 如何判斷刪除哪個字元卡在這了,還有一個s.substring(startIndex, endIndex)的引數的含義[startIndex, endIndex)