125. Valid Palindrome
题目
给出一个字符串,判断它是否是回文,只考虑字母和数字(alphanumeric),其他的忽略。
注意:关于本题,我们定义空字符串为有效回文。
例1:
输入: “A man, a plan, a canal: Panama”
输出: true
例2:
输入: “race a car”
输出: false
代码块
public class solution {
public static boolean isPalindrome(String s){
if(s == null) return true;
int head = 0, tail = s.length() -1;
char cHead = s.charAt(head), cTail = s.charAt(tail);
while(head <= tail){
if(!Character.isLetterOrDigit(cHead)){
head++;
}else if(!Character.isLetterOrDigit(cTail)){
tail--;
}else{
if(Character.toLowerCase(cHead) != Character.toLowerCase(cTail)){
return false;
}
head++;
tail--;
}
}
return true;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine() ;
System.out.println(isPalindrome(s));
}
}
代码分析
本题没有参考他的,本以为很简单,自己试着编一下,但是提交都不对,就去看了看discussion。
存在的主要问题是:不知道字符串的相关调用,不知道使用两个指针你,还是以数组的思维方式去考虑问题。
本题使用了两个指针,一个从头移动,一个从尾移动,只要判断首尾是否相等即可。
第一:判断时,只需要考虑字母数字,有个功能可以只识别数字和字母 : Character.isLetterOrDigit()
;
第二:判断时,要把它们转化为小写:Character.toLowerCase(cHead)
;
第三:使用键盘读入字符串时,需要使用Scanner,这个是java自带的Scanner 类。
nextLine()具有以下特点:
1. 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2. 可以获得空白。