驗證是否爲迴文
題目要求:給出一個字符串,驗證其是否爲迴文(忽略非字母字符並忽略大小寫)
tags:String, Two Pointer
一般驗證是否爲迴文使用two pointer,比較頭尾指針是否相同,做該題時還需要忽略非字母字符,並將字符都轉換爲小寫(或大寫)再進行比較。
public boolean isPalindrome(String s) {
int head=0;
int tail=s.length()-1;
while(head<tail){
char h = Character.toLowerCase(s.charAt(head));
char t = Character.toLowerCase(s.charAt(tail));
if(!Character.isLetter(h)&&!Character.isDigit(h)){
head++;
continue;
}
if(!Character.isLetter(t)&&!Character.isDigit(t)){
tail--;
continue;
}
if(h!=t){
return false;
}
tail--;
head++;
}
<span style="white-space:pre"> </span>return true;
}
還有另一種取巧的辦法:使用正則表達式,去掉其中非字幕的字符,並將字符串全部轉爲小寫(或大寫),再翻轉,比較兩個字符串是否相同。這些都可以用java自帶的函數來解決。
public boolean isPalindrome2(String s) {
<span style="white-space:pre"> </span>String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
String rev = new StringBuffer(actual).reverse().toString();
return actual.equals(rev);
}