leetcode 680. Valid Palindrome II 驗證迴文字串 Ⅱ
阿新 • • 發佈:2022-05-18
一、題目大意
給定一個非空字串 s,最多刪除一個字元。判斷是否能成為迴文字串。
示例 1:
輸入: s = "aba"
輸出: true
示例 2:
輸入: s = "abca"
輸出: true
解釋: 你可以刪除c字元。
示例 3:
輸入: s = "abc"
輸出: false
提示:
- 1 <= s.length <= 105
- 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)