LeetCode-680. 驗證迴文字符串

LeetCode-680. 驗證迴文字符串

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

示例 1:

輸入: "aba"
輸出: True

示例 2:

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

思路

首先,驗證迴文字符串使用的是雙指針的思路。頭尾指針指向的字符是否相同,如果到相遇之前都相同,那麼說明是迴文的。

如何驗證刪除之後是迴文字符串呢?還是雙指針,不過要加一個判斷,當首尾兩個字符不相等的時候,需要比較頭指針後面一個字符到尾指針是否迴文,同理,還要比較尾指針前面一個字符是否與頭指針迴文。取或。

class Solution {
    public boolean validPalindrome(String s) {
        
        if(s.length()==0) return false;
        int l=0;
        int r=s.length()-1;
	
        while(l<r)
        {
            if(s.charAt(l++)!=s.charAt(r--))
            {
                //這裏下標容易搞錯,要把++和--的退回去。實際是按照思路來的。
                return valid(s,l,r+1) || valid(s,l-1,r);
            }
        }
        return true;
    }
    public boolean valid(String s,int l,int r)
    {
        while(l<r)
        {
            if(s.charAt(l++)!=s.charAt(r--)) return false;
        }
        return true;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章