中判斷迴文的程式碼_680. 驗證迴文字串 Ⅱ
阿新 • • 發佈:2021-01-22
技術標籤:中判斷迴文的程式碼
680. 驗證迴文字串 Ⅱ
給定一個非空字串 s
,最多刪除一個字元。判斷是否能成為迴文字串。
示例1:
輸入: "aba"
輸出: True
示例2:
輸入: "abca"
輸出: True
解釋: 你可以刪除c字元。
注意:
- 字串只包含從
a-z
的小寫字母。字串的最大長度是50000
。
題解:
本題和125. 驗證迴文串很像,除去了標點符號和大小寫,但是增加了可以刪除一個元素的條件。我們還是建立雙指標,這裡我們選擇將字串s
轉換為char[]
陣列,這樣能夠提高速度。left
指標向前遍歷,right
指標向後遍歷,因為題目說了允許刪除一個字元來構成迴文字串,所以我們在遇到第一個不是迴文的兩個字元後,可以通過isValidPalindrome
left
和right
之間的子串是不是迴文子串。這樣,當遇到第一組不相同的字元後,我們進入isValidPalindrome
判斷,如果子串繼續不相同,那麼就不是迴文字串,如果相同就是。
具體程式碼如下:
class Solution { public boolean validPalindrome(String s) { int left = 0, right = s.length() - 1; char[] chars = s.toCharArray(); while (left < right) { if (chars[left] != chars[right]) //如果兩個子串有一個不是迴文子串,那麼該字串就不是迴文字串 return isValidPalindrome(chars, left + 1, right) || isValidPalindrome(chars, left, right - 1); left++; right--; } return true; } private boolean isValidPalindrome(char[] chars, int left, int right) { while (left < right) { if (chars[left++] != chars[right--]) return false; } return true; } }