1. 程式人生 > >LeetCode - 680. Valid Palindrome II(刪除一個字元判斷能否構成迴文)

LeetCode - 680. Valid Palindrome II(刪除一個字元判斷能否構成迴文)

LeetCode - 680. Valid Palindrome II(刪除一個字元判斷能否構成迴文)

題目連結

題目

就是給你一個字串,問你是否能刪除最多一個字元(可以不用刪除) ,得到一個迴文串。
在這裡插入圖片描述

解析

暴力列舉刪除每一個位置的方法肯定是行不通的。

這裡需要用到迴文串的性質

看下面兩個例子:

案例一: e a d c b c a e

在這裡插入圖片描述

另一種情況:

e a b f f b e a e
在這裡插入圖片描述

所以解題步驟:

設定兩個指標,往中間靠攏,然後當遇到s[L] != s[R]的時候,就判斷[L + 1, R]或者[L, R-1]部分可以不可以構成迴文串,只要有其中一個可以,就返回true

即可。

class Solution {
    public boolean validPalindrome(String s) {
        int L = 0, R = s.length() - 1;
        while(L < R){
            if(s.charAt(L) != s.charAt(R)){
                return isPalindrome(s, L+1, R) || isPalindrome(s, L, R-1); 
            }else {
                L++;
                R--
; } } return true; } private boolean isPalindrome(String s, int L, int R){ while(L < R) if(s.charAt(L++) != s.charAt(R--)) return false; return true; } }