Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
给定一个字符串,判断它是否是回文字符串,仅考虑字母,并且忽略大小写。
使用首尾指针,分别找到第一个符合条件的位置,进行比较,如果相等就进行下一组比较,不相等就返回false,直到所有的字母都处理完。
算法实现类
public class Solution {
public boolean isPalindrome(String s) {
if (s == null) {
return false;
}
int left = 0;
int right = s.length() - 1;
int delta = ‘A‘ - ‘a‘;
char l;
char r;
while (left < right) {
while (left < s.length() && !isAlphanumericCharacters(s.charAt(left))) { // 从左向右找数字与字母
left++;
}
while (right >= 0 && !isAlphanumericCharacters(s.charAt(right))) { // 从右向左找数字与字母
right--;
}
if (left < right) {
l = s.charAt(left);
r = s.charAt(right);
if (l == r || l - r == delta || r - l == delta) {
left++;
right--;
} else {
return false;
}
}
}
return true;
}
/**
* 判断是否是字母或者数字
*
* @param c 待判断的数字
* @return 判断结果
*/
private boolean isAlphanumericCharacters(char c) {
return c >= ‘0‘ && c <= ‘9‘ || c >= ‘a‘ && c <= ‘z‘ || c >= ‘A‘ && c <= ‘Z‘;
}
}
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。
版权声明:本文为博主原创文章,未经博主允许不得转载。
【LeetCode-面试算法经典-Java实现】【125-Valid Palindrome(回文字验证)】
原文地址:http://blog.csdn.net/derrantcm/article/details/47651267