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