125. Valid Palindrome
- Total Accepted: 150777
- Total Submissions: 585174
- Difficulty: Easy
- Contributor: LeetCode
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.
Subscribe to see which companies asked this question.
题目链接:https://leetcode.com/problems/valid-palindrome/#/description
解题思路:本来是想处理一遍字符串,过滤掉不合法的字符,但这样会超时,时间是o(n),只能边处理边判断,一边从前往后过滤掉不合法字符,一边从后往前过滤掉不合法字符,然后前后对应字符比较是否相等。注意判断空字符串,时间是o(n/2)。
代码如下:
public class Solution {
public boolean isPalindrome(String s) {
s = s.toLowerCase();
if(s.length() <= 1){
return true;
}
int i=0,j= s.length()-1;
while(i<j){
char ch1='A' , ch2 ='A' ;
while(i < j){
ch1 = s.charAt(i);
if(ch1>='0' && ch1 <='9' ||ch1 >= 'a' && ch1<='z'){
break;
}
ch1='A';
i++;
}
while(j>i ){
ch2 = s.charAt(j);
if(ch2 >='0' && ch2 <='9' ||ch2 >= 'a' && ch2<='z'){
break;
}
j--;
ch2 ='A';
}
if(ch1!='A' && ch2!='A' && ch1 != ch2)
{
return false;
}
i++;
j--;
}
return true;
}
}