1. 程式人生 > >30、驗證迴文串

30、驗證迴文串

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

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

示例 1:

輸入: “A man, a plan, a canal: Panama”
輸出: true
示例 2:

輸入: “race a car”
輸出: false

我的程式碼:其中這道題很簡單,一個從前一個從後分別設定一個變數,由於只比較的是數字和字元因此當不是數字和字元時候就需要將變數加1或者是減一,當都是數字或者字元時那麼需要的是比較,並且使用的是忽略大小寫的比較

class Solution {
    public boolean isPalindrome(String s) {
         if(s == null || s.length() == 0 ){
				return true;
			}
			int start = 0;
			int end = s.length()-1;
			char[] t = s.toCharArray();
			while (start < end) {
			//	System.out.println("開頭     :"+start+t[start]);
				//System.out.println("結尾     :"+end+t[end]);
				if((t[start]<='Z'&&t[start]>='A') || (t[start]<='9')&&t[start] >= '0' ||(t[start]<='z'&&t[start]>='a')){	
				//	System.out.println("be");
				//	System.out.println(t[end]);
					if((t[end]<='Z'&&t[end]>='A') || (t[end]<='9')&&t[end] >= '0'||(t[end]<='z'&&t[end]>='a')){
				//		System.out.println("bijao");
						String s1 = Character.toString(t[start]);
						String s2 = Character.toString(t[end]);
						if(s1.equalsIgnoreCase(s2)){
							start++;
							end--;						
						}else {
							return false;
						}
					}else {
						end--;
					}				
				}else {
					start++;
				}	
			}
			return true;
    }
}

排名高的
思路其實感覺和我的差不多

class Solution {
    public boolean isPalindrome(String s) {
        char[] c=s.toCharArray();
        int l=0;
        int r=c.length-1;
        while(l<r){
            while((l<r)&&(c[l]<'0'||c[l]>'9')&&(c[l]<'a'||c[l]>'z')&&(c[l]<'A'||c[l]>'Z')){
                l++;
            }
            while((r>l)&&(c[r]<'0'||c[r]>'9')&&(c[r]<'a'||c[r]>'z')&&(c[r]<'A'||c[r]>'Z')){
                r--;
            }
            if(l>r)
                break;
           if(c[l]>='a'){
               c[l]-=32;
           }
            if(c[r]>='a'){
               c[r]-=32;
           }
            if(c[l]==c[r]){
                l++;
                r--;
            }else{
                return false;
            }
        }
        return true;
    }
}