来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome/
题目
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
思路
- 使用左右指针,挨个比较;
- 边界条件为左右指针重合,则为回文串,返回true即可,否则指针不会重合
代码
public boolean isPalindrome(String s) {
if (s == null) {
return true;
}
int right = s.length() - 1;
int left = 0;
// 判断左右指针是否重合
while (left < right) {
char leftChar = Character.toLowerCase(s.charAt(left));
// 判断左边字符,不是数字or字符,则往前走一步
if (!isCharType(leftChar)) {
left ++;
continue;
}
char rightChar = Character.toLowerCase(s.charAt(right));
// 判断右边字符,不是数字or字符,则往后退一步
if (!isCharType(rightChar)) {
right --;
continue;
}
// 若相等,移动指针继续判断
if (leftChar == rightChar) {
left ++;
right --;
} else {
return false;
}
}
return true;
}
/**
* 判断是否数字or字符
* @param c
* @return
*/
private boolean isCharType(char c) {
return c >= 'a' && c <= 'z'
|| c <= 'A' && c >= 'Z'
|| c >= '0' && c <= '9';
}
网友评论