1. 程式人生 > >125. 驗證迴文串(java)

125. 驗證迴文串(java)

給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。

說明:本題中,我們將空字串定義為有效的迴文串。

示例 1:

輸入: "A man, a plan, a canal: Panama"
輸出: true

示例 2:

輸入: "race a car"
輸出: false

程式碼一:java


class Solution {
     public static boolean isPalindrome(String s) {
        if(null==s||s.length()<2){//如果字串的長度小於2,直接返回true
            return true;
        }
        int size=s.length()-1;//記載的總長度
        char left,right;//左右指標指向的字元
        for(int i=0;i<s.length()-1;i++){//此處不使用size是因為size作為變數需要在下面進行實時修改
            if(!isvalid(s.charAt(i))){//判斷是否為需要判斷的字元
                continue;
            }
            left=s.charAt(i);
            while(size>=0&&!isvalid(s.charAt(size))){//右角標大於0並且字元無效時,右指標左移
                size--;
            }
            right=s.charAt(size);
            if(!issame(left,right)){//判斷左右角標對應的字元是否相等
                return false;
            }
            size--;
        }
        return true;
    }
 
    public static boolean issame(char left, char right) {
        if(left<65||right<65){//判斷字元是否小於65
            if(left==right){//小於65代表字元為數字,直接判斷是否相等就可以了
                return true;
            }
        }else{
            if(left==right||Math.abs(left-right)==32){//字元大於等於65代表此處是字母,差值為32代表字母相等,一個是大寫一個是小寫
                return true;
            }
        }
        return false;
    }
 
    public static boolean isvalid(char c) {
        if(c>='a'&&c<='z'||c>='A'&&c<='Z'||c>='0'&&c<='9'){
            return true;
        }
        return false;
    }
}

程式碼二:java

class Solution {
    public boolean isPalindrome(String s) {
        char[] cha = s.toCharArray();//將字串物件中的字元轉換為一個字元陣列
        int i = 0, j = cha.length - 1;
        while(i < j){
            if(!Character.isLetterOrDigit(cha[i]))
                i++;
            else if(!Character.isLetterOrDigit(cha[j]))
                j--;
            else
                if(Character.toLowerCase(cha[i]) == Character.toLowerCase(cha[j])){
                    i++;
                    j--;
                }else{
                    return false;
                }
        }
        return true;
    }

}