125. Valid Palindrome

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. 可以获得空白。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章