码迷,mamicode.com
首页 > 编程语言 > 详细

Valid Palindrome LeetCode Java

时间:2018-06-11 23:41:52      阅读:441      评论:0      收藏:0      [点我收藏+]

标签:return   during   lan   rmi   sid   rac   hat   中文标点   replace   

描述
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? is is a good question to ask during an
interview.
For the purpose of this problem, we define empty string as valid palindrome.

分析
去标点符号,看是不是回文
代码

 1 public class ValidPalindrome {
 2     public static void main(String[] args) {
 3         String str= "A man, a plan, a canal: Panama";
 4         System.out.println(validPalindrome(str));
 5     }
 6     public static boolean validPalindrome(String str) {
 7         if (str=="") 
 8             return true;
 9 //        String regex= "/[^\\u4e00-\\u9fa5\\w]/g";
10         String regex= "[\\p{Punct}\\p{Space}]+"; //去标点符号的正则表达式, 但不能去“”和中文标点
11         str=str.replaceAll(regex,"");
12         String strlow=str.toLowerCase();
13 //        return strlow;
14         char[] ch=strlow.toCharArray();
15     
16         for(int i=0;i<ch.length;i++) {
17             int j=ch.length-1-i;
18             if(i<=j) {
19                if(ch[i]==ch[j]) {
20                    continue;
21                }else {
22                    return false;
23                }
24             }
25         }
26         return true;
27     }
28 }

方法2(转载)

不用正则

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

 

Valid Palindrome LeetCode Java

标签:return   during   lan   rmi   sid   rac   hat   中文标点   replace   

原文地址:https://www.cnblogs.com/ncznx/p/9170416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!