描述git
給定一個字符串,判斷其是否爲一個迴文串。只考慮字母和數字,忽略大小寫。面試
你是否考慮過,字符串有多是空字符串?這是面試過程當中,面試官經常會問的問題。
在這個題目中,咱們將空字符串斷定爲有效迴文。
樣例bash
樣例 1:函數
輸入: "A man, a plan, a canal: Panama"
輸出: true
解釋: "amanaplanacanalpanama"複製代碼
樣例 2:ui
輸入: "race a car"
輸出: false
解釋: "raceacar"複製代碼
挑戰
O(n) 時間複雜度,且不佔用額外空間。spa
相關題目code
題目解析cdn
判斷給定字符串是不是迴文串,只須要比較ASCII碼的字母和數字便可,其它符號跳過blog
首先介紹兩個函數,在這裏使用比較方便字符串
int isalnum(int c);若是c是數字或大小寫字母,返回true
int toupper(int c);將字符c轉爲大寫
迴文串左右是對稱的,因此只須要從兩邊向中間推動判斷
參考代碼
public class Solution {
public boolean isPalindrome(String s) {
if (s == null || s.length() == 0) {
return true;
}
int front = 0;
int end = s.length() - 1;
while (front < end) {
while (front < s.length() && !isvalid(s.charAt(front))) { // nead to check range of a/b
front++;
}
if (front == s.length()) { // for empty string 「.,,,」
return true;
}
while (end >= 0 && ! isvalid(s.charAt(end))) { // same here, need to check border of a,b
end--;
}
if (Character.toLowerCase(s.charAt(front)) != Character.toLowerCase(s.charAt(end))) {
break;
} else {
front++;
end--;
}
}
return end <= front;
}
private boolean isvalid (char c) {
return Character.isLetter(c) || Character.isDigit(c);
}
}複製代碼