给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:
本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入:
“A man, a plan, a canal: Panama”
输出:
true
示例 2:
输入:
“race a car”
输出:
false
解析:
本题简单的回文数判断,可以使用String里的toCharArray()方法将其变为char数组依次解决。
代码:
//解法1 StringBuilder
class Solution {
public boolean isPalindrome(String s) {
if (s == null) return true;
s = s.toLowerCase();
int l = s.length();
StringBuilder str = new StringBuilder(l);
for (char c : s.toCharArray()) {
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')) {
str.append(c);
}
}
return str.toString().equals(str.reverse().toString());
}
}
//解法二 直接依次比较
class Solution {
public boolean isPalindrome(String s) {
boolean c = true;
char[] str = s.toCharArray();
int top = 0, but = str.length-1;
char t = '1', b = '1';
while(top < but ){
while(top < but){
if(str[top] >= 'a' && str[top] <= 'z') {
t = str[top];
break;
}
if(str[top] >= '0' && str[top] <= '9') {
t = str[top];
break;
}
if(str[top] >= 'A' && str[top] <= 'Z') {
t = (char)(str[top]+32);
break;
}
top++;
}
while(top < but){
if(str[but] >= 'a' && str[but] <= 'z') {
b = str[but];
break;
}
if(str[but] >= '0' && str[but] <= '9') {
b = str[but];
break;
}
if(str[but] >= 'A' && str[but] <= 'Z') {
b = (char)(str[but]+32);
break;
}
but--;
}
if(top >= but){
c = true;
break;
}
if(t != b){
c = false;
break;
}
top++;
but--;
}
return c;
}
}