題目
給定一個字符串,驗證它是否是迴文串,只考慮字母和數字字符,可以忽略字母的大小寫。
分析
使用雙指針的方法遍歷整個字符串,判斷字符串是否是迴文字符串。
幾個要點:
1.Character.isLetterOrDigit()
用來判斷當前字符是否是字母和數字字符。
2.Character.toLowerCase()
將大寫字母轉化爲小寫字母,再進行比較。
代碼
class Solution {
public boolean isPalindrome(String s) {
int left=0, right=s.length()-1;
while(left<right){
//判斷左指針字符是否是字母或數字
while(left<right&&!Character.isLetterOrDigit(s.charAt(left))){
++left;
}
//判斷右指針字符是否是字母或數字
while(left<right&&!Character.isLetterOrDigit(s.charAt(right))){
--right;
}
if(Character.toLowerCase(s.charAt(left))!=Character.toLowerCase(s.charAt(right))){
return false;
}
++left;
--right;
}
return true;
}
}
複雜度分析
- 時間複雜度:O(n)
- 空間複雜度:O(1)