LeetCode680.驗證會問字符串Ⅱ

LeetCode680.驗證會問字符串Ⅱ

問題

分析

這個題目就是對於迴文串的條件進行了放寬,允許刪除一個元素,這樣會導致字符之間的對應關係發生變化,相對簡單的方法就是定義兩個指針,分別從頭部或者尾部進行遍歷,直到兩者匯合,如果發生不相等的情況,無非就是兩種,要麼刪除頭部的要麼刪除尾部的,最後只要有一個能形成一個迴文串即可。

代碼實現

public boolean validPalindrome(String s) {
        int low=0;
        int higth=s.length()-1;
        while (low<higth){
            char c1=s.charAt(low),c2=s.charAt(higth);
            if(c1==c2){
                low++;
                higth--;
            }else {
                // 需要進行刪除
                boolean flagz=true,flagy=true;
                // 刪左邊
                int i=low+1,j=higth;
                while (i<j){
                    char c3=s.charAt(i),c4=s.charAt(j);
                    if(c3!=c4){
                        flagz=false;
                        break;
                    }
                    i++;
                    j--;
                }
                // 刪右邊
                i=low;
                j=higth-1;
                while (i<j){
                    char c3=s.charAt(i),c4=s.charAt(j);
                    if(c3!=c4){
                        flagy=false;
                        break;
                    }
                    i++;
                    j--;
                }
                return flagy||flagz;
            }
        }
        return true;
    }
 }
    }
    return true;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章