125. 驗證迴文串(java)
阿新 • • 發佈:2018-11-26
給定一個字串,驗證它是否是迴文串,只考慮字母和數字字元,可以忽略字母的大小寫。
說明:本題中,我們將空字串定義為有效的迴文串。
示例 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; } }