1. 程式人生 > >【LeetCode】 125 驗證迴文串

【LeetCode】 125 驗證迴文串

在這裡插入圖片描述


解題思路:
1 哦 看吶,這是我們的老朋友雙指標,3Sum這道題也是用這個來做的。設定兩個指標從前後分別向中間遍歷,驗證遇到的對應位置的字元是不是相等。
2 需要注意:統一大小寫的時候別用Character的API toUpperCase,耗時較多,直接x-=32即可;同時注意不可以x = x - 32,會報型別轉換錯誤;

程式碼:

class Solution {
    public boolean isPalindrome(String s) {
        
        s = s.trim();
        char[] c = s.toCharArray();
        
        
        int left;
        int right;
        for (left = 0, right = s.length() - 1;left <= right;){
            //非字母數字則不處理
            //left找字母或者數字
            while (left < s.length() && !isValidChar(c[left]))
                left++;
            //right找字母或數字
            while (right >= 0 && !isValidChar(c[right]))
                right--;
            
            if (left == s.length() && right == -1)
                return true;
            
            //大小寫統一
           if(c[left]>='a'){
               c[left]-=32;
           }
            if(c[right]>='a'){
               c[right]-=32;
           }
            
            //判斷是否相同
            if (c[left] != c[right])
                return false;
            else { 
                left++; right--;
            }
        }
        
        return true;
    }
    
    private boolean isValidChar(char c){
        return (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'); 
    }
}