Valid Palindrome LeetCode Java

描述
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         

 

转载于:https://www.cnblogs.com/ncznx/p/9170416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值