题目链接:
题目:
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
Note: For the purpose of this problem, we define empty string as valid palindrome.
Example 1:
Input: "A man, a plan, a canal: Panama" Output: true
Example 2:
Input: "race a car" Output: false
题目分析:
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
解题思路:
由题意,只考虑数字和字母,同时忽略字母的大小写。Java中有一个函数可以使字符串变为小写,因为先利用这个函数toLowerCase() 。然后从字符串的最开始一位(b=0)和最后一位开始(e=len-1)。
如果该字符不是数字或者字母,那就 ++b 或者 --e。
如果数字或者字母,那就比较两者字符是否相等,不等直接返回 false。相等就同时 ++b, --e ,然后循环操作直到 b<e 的条件不满足为止(即字符串全部判断完成)。
循环结束返回 true,表示如果都没有false,那就最后走出循环后,说明是回文串。
AC代码:(Java)
class Solution {
public boolean isPalindrome(String s) {
if(s.isEmpty())
return true;
String res = s.toLowerCase();
int b = 0;
int e = res.length()-1;
while(b < e)
{
if(res.charAt(b)<'0' || (res.charAt(b)>'9' && res.charAt(b)<'a') || res.charAt(b)>'z')
{
++b;
continue;
}
if(res.charAt(e)<'0' || (res.charAt(e)>'9' && res.charAt(e)<'a') || res.charAt(e)>'z')
{
--e;
continue;
}
if(res.charAt(b) != res.charAt(e))
return false;
--e;
++b;
}
return true;
}
}