Problem 125: Valid Palindrome
题目不难,但是要注意的东西还是有很多的
思路
这道题的思路就是首尾各一个指针,遇到不是字母或者数字的字符跳过,最后汇合,判定是否为palindrome
public class Solution {
public boolean isPalindrome(String s) {
int start = 0;
int end = s.length() - 1;
char c1, c2;
while (start <= end) {
c1 = s.charAt(start);
c2 = s.charAt(end);
if (!Character.isLetterOrDigit(c1)) {
start++;
} else if (!Character.isLetterOrDigit(c2)) {
end--;
} else {
if (Character.toLowerCase(c1) != Character.toLowerCase(c2)) {
return false;
}
start++;
end--;
}
}
return true;
}
}
易错点
逻辑结构一定要想清楚:几个条件要同时满足(start得是字母,end也得是字母),缺一不可,那么得用 if...else...这个结构
start 和 end 变化的位置
start++; end--;
应该放在else的block下面,因为是在他们都是字母的情况下进行的操作
判断是否为字母
Character.isLetterOrDigit(c1);
转换大小写
Character.toLowerCase(c1);
Last updated
Was this helpful?