问题描述:
Given a string s, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
判断是否是回文字符串(只考虑alphanumeric characters)
(注释)
The sixty-two ASCII alphanumeric characters
0123456789 and ABCDEFGHIJKLMNOPQRSTUVWXYZ and abcdefghijklmnopqrstuvwxyz
have their corresponding ASCII code within the ranges [48 … 57], [65 … 90] and [97 … 122].
思路:这道题思路很简单,首先先把源字符串缩减成只含有alphanumeric characters的字符串并统一大小写。再判断这个字符串是否是回文的(双指针夹击)
代码一遍过:
通过一段时间的联系,还是稍微有点长进的 :)
class Solution {
public boolean isPalindrome(String s) {
//step1: convert s to a string with alphanumeric char only
StringBuilder sb = new StringBuilder();
for (int i=0; i<s.length(); i++){
if ((s.charAt(i)>='A') && (s.charAt(i)<='Z')){
sb.append((char)(s.charAt(i)+('a'-'A')));
}
else if ((s.charAt(i)>='a') && (s.charAt(i)<='z')){
sb.append(s.charAt(i));
}
else if ((s.charAt(i)>='0') && (s.charAt(i)<='9')){
sb.append(s.charAt(i));
}
}
//So far we should get a string with all lower case alphanumeric char
//step2: check whether or not this string sb is Palindrome
int left = 0;
int right = sb.length()-1;
while(left<right){
if (sb.charAt(left)==sb.charAt(right)){
left++;
right--;
}
else{
return false;
}
}
return true;
}
}
时间复杂度 O(n)