0%

leetCode-125:Valid Palindrome

问题描述

定义回文串是去除字符串中非字母和数字的其他字符后,将大写字母转成小写字母后,从左到右显示和从右到左显示是相同的字符串。给定一个字符串,要求判断其是否是回文串。题目链接:点我

样例输入输出

输入:s = “A man, a plan, a canal: Panama”

输出:true

解释:取出非字母和空格并将大写字母转成小写字母后,字符串是“amanaplanacanalpanama”

输入:s = “race a car”

输出:false

解释:取出非字母和空格并将大写字母转成小写字母后,字符串是“raceacar”

问题解法

此题比较简单,使用双指针进行遍历判断,过滤掉非字母和数字的字符即可。代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Solution {
public boolean isPalindrome(String s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
if (!isValidChar(s.charAt(left))) {
left++;
continue;
}

if (!isValidChar(s.charAt(right))) {
right--;
continue;
}

if (!isEqual(s.charAt(left), s.charAt(right))) {
return false;
}

left++;
right--;
}

return true;
}

private boolean isValidChar(char ch) {
return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
}

private boolean isEqual(char first, char second) {
if (first >= 'A' && first <= 'Z') {
first = (char) (first - 'A' + 'a');
}

if (second >= 'A' && second <= 'Z') {
second = (char) (second - 'A' + 'a');
}

return first == second;
}
}