【leetcode刷题笔记】Valid Palindrome

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.


题解:Using two pointers head and tail, head keeps moving forward till it points to an alpha or number; tail moves backward till it points to an alpha or number, then judge if what head points to equals what tail points, if it doesn't equal, return false; Else cotinue moving head and tail to compare characters bewteen them.

We also need a function isValid(char c) to judge if char c is a number or alpha.

The code is below:

 1 public class Solution {
 2     private boolean isValid(char c){
 3         if(c >= 'a' && c <= 'z')
 4             return true;
 5         if(c >= '0' && c <='9')
 6             return true;
 7         
 8         return false;
 9     }
10     
11     public boolean isPalindrome(String s) {
12         s = s.toLowerCase();
13         
14         if(s == null || s.length() <= 1)
15             return true;
16         
17         int head = 0;
18         int tail = s.length() - 1;
19         
20         while(head < tail){
21             while(head < tail && !isValid(s.charAt(head)))
22                 head++;
23             while(tail > head && !isValid(s.charAt(tail)))
24                 tail--;
25             if(s.charAt(head) != s.charAt(tail))
26                 return false;
27             else {
28                 head++;
29                 tail--;
30             }
31             
32         }
33         
34         return true;
35     }
36 }
原文地址:https://www.cnblogs.com/sunshineatnoon/p/3854866.html