【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 }

你可能感兴趣的:(LeetCode)