LeetCode - 125. 判断回文串

LeetCode - 125. Valid Palindrome

Posted by zihengCat on 2019-05-21

前言

本文记录 LeetCode - 125. 判断回文串(Valid Palindrome) 问题。

问题描述

给出一枚字符串,判断其是否为回文字符串,只考虑字符串中的字母与数字字符,并忽略字母大小写。

注意:为了符合题意,我们定义空字符串""也属于回文串。

Input: "A man, a plan, a canal: Panama"
Output: true

注:样例1

Input: "race a car"
Output: false

注:样例2

Input: " "
Output: true

注:样例3

问题解答

回文字符串(英文:Palindrome)的含义为:从头至尾遍历(顺序)和从头至尾遍历(逆序)都相同的字符串。

该题让我们判断,输入字符串是否为回文串,我们只需要按照回文串定义进行判断即可。但是需要考虑到的是,输入字符串中可能包含一些非字母数字字符,也要忽略字母大小写,所以执行实际回文判断之前,我们需要先过滤清洗输入字符串。

class Solution {
    public boolean isPalindrome(String s) {
        String actual = s.replaceAll("[^A-Za-z0-9]", "").toLowerCase();
        String reversed = new StringBuffer(actual).reverse().toString();
        return actual.equals(reversed);
    }
}

代码清单:判断回文串(Java实现)

我们可以在不借助标准库函数的情况下,手动实现出判断回文串的代码逻辑。

class Solution {
    public boolean isPalindrome(String s) {
        char[] arr = s.toCharArray();
        int head = 0;
        int tail = arr.length - 1;
        char cHead, cTail;
        while (head <= tail) {
            cHead = arr[head];
            cTail = arr[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;
    }
}

代码清单:判断回文串(Java实现)

参考资料