验证回文串

LeetCode每日一题,125.Valid Palindrome

先看题目描述

大概就是判断字符串是回文串,忽略字母大小写,只考虑字母和数字

算法和源码

大致思路就是先对字符串进行处理,然后用两个指针,两个指针同时向中间移动,判断字符是否相同,为了省略处理字符串的时间,也可以每次直接将指针移到下一个字母或数字的位置,而不是一次只移动一个,下面是两种实现的源码,第二个的性能要明显更优秀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.util.*;

class Solution {
public boolean isPalindrome(String s) {
String a = s.replaceAll("[^\\dA-Za-z]", "").toLowerCase();
int left = 0;
int right = a.length() - 1;
while (left <= right) {
if (a.charAt(left) != a.charAt(right)) return false;
left++;
right--;
}
return true;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.*;

class Solution {
public boolean isPalindrome(String s) {
if (s.length() == 0) return true;
s = s.toLowerCase();
int left = 0;
int right = s.length() - 1;
while (left <= right && !Character.isLetterOrDigit(s.charAt(left))) left++;
while (left <= right && !Character.isLetterOrDigit(s.charAt(right))) right--;
while (left <= right) {
if (s.charAt(left) != s.charAt(right)) return false;
left++;
right--;
while (left <= right && !Character.isLetterOrDigit(s.charAt(left))) left++;
while (left <= right && !Character.isLetterOrDigit(s.charAt(right))) right--;
}
return true;
}
}