Valid Palindrome leetcode java

愛做飯的小瑩子發表於2014-08-01

題目

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.

 

題解

 這道題的幾個點,

一就是alphanumeric characters and ignoring cases,字母和數字,忽略大小寫。

二就是考慮空字串是否為迴文,最好在面試時候問下面試官,這裡是認為空字串是迴文。

因為忽略大小寫,所以就統一為大寫。

然後就判斷當前檢查字元是否符合範圍,否則大小指標挪動。

如果發現有大小指標指向的值有不同的,就返回false,否則,繼續檢查。

最後返回true。

程式碼如下:

 1        public static boolean isPalindrome(String s) {
 2             if(s.length()==0)
 3                 return true;
 4             
 5             s = s.toUpperCase();
 6             int low1 = 'A', high1 = 'Z';
 7             int low2 = '0', high2 = '9';
 8             int low = 0, high = s.length()-1;
 9             
10             while(low < high){
11                 if((s.charAt(low)<low1||s.charAt(low)>high1)
12                     && (s.charAt(low)<low2||s.charAt(low)>high2)){
13                         low++;
14                         continue;
15                     }
16                     
17                 if((s.charAt(high)<low1||s.charAt(high)>high1)
18                     && (s.charAt(high)<low2||s.charAt(high)>high2)){
19                         high--;
20                         continue;
21                     }
22                 if(s.charAt(low) == s.charAt(high)){
23                     low++;
24                     high--;
25                 }else
26                     return false;
27             }
28             return true;
29         }

 

相關文章