125. Valid Palindrome
題目
給出一個字符串,判斷它是否是迴文,只考慮字母和數字(alphanumeric),其他的忽略。
注意:關於本題,我們定義空字符串爲有效迴文。
例1:
輸入: “A man, a plan, a canal: Panama”
輸出: true
例2:
輸入: “race a car”
輸出: false
代碼塊
public class solution {
public static boolean isPalindrome(String s){
if(s == null) return true;
int head = 0, tail = s.length() -1;
char cHead = s.charAt(head), cTail = s.charAt(tail);
while(head <= tail){
if(!Character.isLetterOrDigit(cHead)){
head++;
}else if(!Character.isLetterOrDigit(cTail)){
tail--;
}else{
if(Character.toLowerCase(cHead) != Character.toLowerCase(cTail)){
return false;
}
head++;
tail--;
}
}
return true;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine() ;
System.out.println(isPalindrome(s));
}
}
代碼分析
本題沒有參考他的,本以爲很簡單,自己試着編一下,但是提交都不對,就去看了看discussion。
存在的主要問題是:不知道字符串的相關調用,不知道使用兩個指針你,還是以數組的思維方式去考慮問題。
本題使用了兩個指針,一個從頭移動,一個從尾移動,只要判斷首尾是否相等即可。
第一:判斷時,只需要考慮字母數字,有個功能可以只識別數字和字母 : Character.isLetterOrDigit()
;
第二:判斷時,要把它們轉化爲小寫:Character.toLowerCase(cHead)
;
第三:使用鍵盤讀入字符串時,需要使用Scanner,這個是java自帶的Scanner 類。
nextLine()具有以下特點:
1. 以Enter爲結束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字符。
2. 可以獲得空白。