Leetcode125. 验证回文串(有图解)

125. 验证回文串

描述

  给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

  说明:本题中,我们将空字符串定义为有效的回文串。

示例 1

输入: “A man, a plan, a canal: Panama”
输出: true
示例 2:

示例 2

输入: “race a car”
输出: false

代码

class Solution {
    public boolean isPalindrome(String s) {
        if (isEmpty(s)) {
            return true;
        }
        // 数据清洗
        StringBuffer sb = new StringBuffer();
        for (char c : s.toCharArray()) {
            sb.append(cleanData(c));
        }
        s = sb.toString();
        if (isEmpty(s)) {
            return true;
        }
        // 双指针
        int head = 0;
        int tail = s.length() - 1;
        int mid = (head + tail) / 2;

        while (head <= mid) {
            if (s.charAt(head++) != s.charAt(tail--)) {
                return false;
            }
        }
        return true;
    }

    public String cleanData(char c) {
        //数字 & 小写字母
        if (('0' <= c && c <= '9') || ('a' <= c && c <= 'z')) {
            return String.valueOf(c);
        }
        //大写字母
        if ('A' <= c && c <= 'Z') {
            return String.valueOf((char) (c + ('a' - 'A')));
        }
        // 非法字符
        return "";
    }

    public boolean isEmpty(String s){
        return s == null || s.length() == 0;
    }
}

图解

结果

原创文章 13 获赞 24 访问量 6468

猜你喜欢

转载自blog.csdn.net/Kirito19970409/article/details/105586755