题目来源:https://leetcode.com/problems/valid-palindrome/
问题描述
125. Valid Palindrome
Easy
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
------------------------------------------------------------
题意
判断是否是回文字符串,只考虑英文字符和数字,忽略空格和标点以及大小写。
------------------------------------------------------------
思路
两个指针分别从字符串头和字符串尾判断,跳过无效字符,直到两指针重合
------------------------------------------------------------
代码
class Solution {
public boolean isPalindrome(String s) {
int n = s.length();
if (n == 0) {
return true;
}
int left = 0, right = n - 1;
while (left < right) {
char cl = s.charAt(left), cr = s.charAt(right);
if (!((cl >= 'a' && cl <= 'z') || (cl >= 'A' && cl <= 'Z') || (cl >= '0' && cl <= '9'))) {
++left;
continue;
}
if (!((cr >= 'a' && cr <= 'z') || (cr >= 'A' && cr <= 'Z') || (cr >= '0' && cr <= '9'))) {
--right;
continue;
}
if (cl >= 'A' && cl <= 'Z') {
cl += 'a' - 'A';
}
if (cr >= 'A' && cr <= 'Z') {
cr += 'a' - 'A';
}
if (cl != cr) {
return false;
}
++left;
--right;
}
return true;
}
}