LC 125 验证回文串
- 虽然是小问题但是要注意细节
- 有“.,.”连续不合法情况,故判断是否合法时需要使用while而不是if
- 有begin=0,end=1情况,begin++&&end–后会交错,故循环不能单纯使用==,应该使用<
class Solution {
public boolean isPalindrome(String s) {
char[] a=s.toCharArray();
int end=a.length-1;
int begin=0;
while(begin<end){
while(begin<end && !right(a[begin]))begin++;
while(begin<end && !right(a[end]))end--;
if (Character.toLowerCase(a[begin])!=Character.toLowerCase(a[end]))return false;
begin++;
end--;
}
return true;
}
public boolean right(char a){
return (a>='a'&& a<='z')||(a>='A'&& a<='Z')||(a>='0'&& a<='9');
}
}
class Solution {
public boolean isPalindrome(String s) {
int begin=0;
int end=s.length()-1;
while(begin<end){
while(begin<end && !Character.isLetterOrDigit(s.charAt(begin)))begin++;
while(begin<end && !Character.isLetterOrDigit(s.charAt(end)))end--;
if(Character.toLowerCase(s.charAt(begin))!=Character.toLowerCase(s.charAt(end)))return false;
begin++;
end--;
}
return true;
}
}
- 在当前情况下,使用char[]反而空间占用更小;但在字符串更长时,在原字符串上操作应该会节省更多空间( O(1) vs O(|s|) )。