一、题目描述
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
二、解题思路
1、首先使用正则表达式将字符串中的非法字符进行删除
①非字母数字的字符
s.replaceAll("[^A-Za-z0-9]", "")
②空格
s.replace(" ","")
2、使用双指针进行回文数判断
初始时,左右指针分别指向s的两侧,随后我们不断地将这两个指针相向移动,每次移动一步,并判断这两个指针指向的字符是否相同,如果不同,则非回文数。当这两个指针相遇时,就说明 s是回文串。
三、代码
class Solution {
public boolean isPalindrome(String s) {
s=s.replaceAll("[^A-Za-z0-9]", "").replace(" ","");
for(int i=0,j=s.length()-1;i<s.length()/2;i++,j--){
char a=Character.toLowerCase(s.charAt(i));
char b=Character.toLowerCase(s.charAt(j));
System.out.println(a+":"+b);
if(a!=b){
return false;
}
}
return true;
}
}
四、复杂度分析
时间复杂度:O(N),其中N是字符串的长度
空间复杂度:O(1)
欢迎关注微信公众号【算法攻城师】