给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
来源:力扣(LeetCode)
法1:双指针
执行用时:5ms,在所有Java提交中击败了36.13%的用户
内存消耗:38.6MB,在所有Java提交中击败了27.74%的用户
法2:正则匹配
执行用时:26ms,在所有Java提交中击败了11.07%的用户
内存消耗:39.6MB,在所有Java提交中击败了5.02%的用
package 字符串;
import java.util.ArrayList;
import java.util.Arrays;
public class 验证回文串_125 {
/*
法1:双指针
执行用时:5ms,在所有Java提交中击败了36.13%的用户
内存消耗:38.6MB,在所有Java提交中击败了27.74%的用户
*/
public static boolean isPalindrome(String s){
int i=0,j=s.length()-1;
//全部转大写
s=s.toUpperCase();
while (i<j){
//如果不是字符或数字,左指针右移
if(!Character.isLetterOrDigit(s.charAt(i))){
i++;
continue;
}
//如果不是字符或数字,右指针左移
if(!Character.isLetterOrDigit(s.charAt(j))){
j--;
continue;
}
if(s.charAt(i)!=s.charAt(j)){
System.out.println(s.charAt(i));
System.out.println(s.charAt(j));
return false;
}
i++;
j--;
}
return true;
}
/*
法2:正则匹配
执行用时:26ms,在所有Java提交中击败了11.07%的用户
内存消耗:39.6MB,在所有Java提交中击败了5.02%的用户
*/
public static boolean isPalindrome2(String s){
String a = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
StringBuilder x=new StringBuilder(a);
String b=x.reverse().toString();
return a.equalsIgnoreCase(b);
}
public static void main(String[] args) {
String s="A man, a plan, a canal: Panama";
System.out.println(isPalindrome(s));
}
}
户