【LEETCODE】680.驗證迴文字符串Ⅱ

題目

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

思路

驗證是否是迴文字符,至少需要O(n)的時間複雜度。
因爲至多刪除一個字符,因此在刪除一個字符之後,進行判斷剩下的字符是否能構成迴文字符串即可。

代碼

class Solution {
    public boolean validPalindrome(String s) {
        int len = s.length();
        //最少時間複雜度:O(n)
        int lo = 0;
        int hi = len-1;
        while(lo<hi){
            if(s.charAt(lo)==s.charAt(hi)){
                lo++;
                hi--;
            }else{
                boolean flagA=true;
                boolean flagB=true;
                for(int i=lo, j=hi-1;i<j;i++,j--){
                    if(s.charAt(i)!=s.charAt(j)){
                        flagA=false;
                        break;
                    }
                }
                for(int i=lo+1, j=hi;i<j;i++,j--){
                    if(s.charAt(i)!=s.charAt(j)){
                        flagB=false;
                        break;
                    }
                }
                return flagA||flagB;
            } 
           }
             return true;
}
}

複雜度分析

  1. 時間複雜度:O(n)
  2. 空間複雜度:O(1)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章