LeetCode: Valid Palindrome 解题报告

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.

LeetCode: Valid Palindrome 解题报告

SOLUTION 1:

左右指针往中间判断。注意函数: toLowerCase

 1 /*

 2     SOLUTION 1: Iterator.

 3     */

 4     public boolean isPalindrome1(String s) {

 5         if (s == null) {

 6             return false;

 7         }

 8         

 9         int len = s.length();

10         

11         boolean ret = true;

12         

13         int left = 0;

14         int right = len - 1;

15         

16         String sNew = s.toLowerCase();

17         

18         while (left < right) {

19             // bug 1: forget a )

20             while (left < right && !isNumChar(sNew.charAt(left))) {

21                 left++;

22             }

23             

24             while (left < right && !isNumChar(sNew.charAt(right))) {

25                 right--;

26             }

27             

28             if (sNew.charAt(left) != sNew.charAt(right)) {

29                 return false;

30             }

31             

32             left++;

33             right--;

34         }

35         

36         return true;

37     }

38     

39     public boolean isNumChar(char c) {

40         if (c <= '9' && c >= '0' || c <= 'z' && c >= 'a' || c <= 'Z' && c >= 'A') {

41             return true;

42         }

43         

44         return false;

45     }
View Code

 

SOLUTION 2:

引自http://blog.csdn.net/fightforyourdream/article/details/12860445 的解答,会简单一点儿。不用判断边界。

左右指针往中间判断。新技能GET: isLetterOrDigit 

 1 /*

 2     SOLUTION 2: Iterator2.

 3     */

 4     public boolean isPalindrome(String s) {

 5         if (s == null) {

 6             return false;

 7         }

 8         

 9         int len = s.length();

10         

11         boolean ret = true;

12         

13         int left = 0;

14         int right = len - 1;

15         

16         String sNew = s.toLowerCase();

17         

18         while (left < right) {

19             // bug 1: forget a )

20             if (!Character.isLetterOrDigit(sNew.charAt(left))) {

21                 left++;

22             // bug 2: Line 67: error: cannot find symbol: method isLetterOrDigital(char)    

23             } else if (!Character.isLetterOrDigit(sNew.charAt(right))) {

24                 right--;

25             } else if (sNew.charAt(left) != sNew.charAt(right)) {

26                 return false;

27             } else {

28                 left++;

29                 right--;

30             }

31         }

32         

33         return true;

34     }
View Code

 

GITHUB:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/string/IsPalindrome_2014_1229.java

你可能感兴趣的:(LeetCode)