题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例
示例 1:
输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:
输入: “race a car”
输出: false
解题思路
- 设置两个指针分别指向字符串首尾;
- 遍历字符串,如果当前字符不是字母或数字字符,则直接跳过;
- 再比较两字符串对应的字符是否相等,不等直接返回false;
- 直到遍历完整个字符串,则为回文字符串
代码实现
class Solution {
public boolean isPalindrome(String s) {
if (s.length() == 0) {
return true;
}
char[] c = s.toLowerCase().toCharArray();
int low = 0,high = s.length()-1;
while (low < high) {
if(!Character.isLetterOrDigit(c[low])){
low++;
continue;
}
if (!Character.isLetterOrDigit(c[high])) {
high--;
continue;
}
if (c[low] != c[high]) {
return false;
}
low++;
high--;
}
return true;
}
}
复杂度分析
- 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串的长度。
- 空间复杂度: O ( 1 ) O(1) O(1)。