验证回文串

我是研究僧i 提交于 2019-12-15 23:44:02
题目:

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

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

示例 1:

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

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

思路

先将输入的字符串都转为小写;
再将符合条件(属于字母或数字)的字符存入一个新的字符串中;
翻转字符串判断原串与翻转后的串是否相同。

实现
public static boolean isPalindrome(String s) {
    if (s == null || "".equals(s)) {
        return true;
    }
    s = s.toLowerCase();
    StringBuilder str = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if ('a' <= c && c <= 'z' || '0' <= c && c <= '9') {
            str.append(c);
        }
    }
    return str.toString().equals(str.reverse().toString());
}
public static boolean isPalindrome(String s) {
    if (s == null) {
        return true;
    }
    if (s.length() <= 1) {
        return true;
    }
    StringBuilder str = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if ('A' <= c && c <= 'Z') {
            c = (char) ((int) c + 32);
        }
        if ('a' <= c && c <= 'z' || '0' <= c && c <= '9') {
            str.append(c);
        }
    }
    if (str.length() == 0) {
        return true;
    }
    for (int i = 0, j = str.length() - 1; i < j; i++, j--) {
        if (str.charAt(i) != str.charAt(j)) {
            return false;
        }
    }
    return true;
}
public static boolean isPalindrome(String s) {
    if (s == null) {
        return true;
    }
    if (s.length() <= 1) {
        return true;
    }
    for (int i = 0, j = s.length() - 1; i < j;) {
        char cLeft = s.charAt(i);
        char cRight = s.charAt(j);
        if ('A' <= cLeft && cLeft <= 'Z') {
            cLeft = (char) ((int) cLeft + 32);
        }
        if ('A' <= cRight && cRight <= 'Z') {
            cRight = (char) ((int) cRight + 32);
        }
        if (!('a' <= cLeft && cLeft <= 'z' || '0' <= cLeft && cLeft <= '9')) {
            i++;
            continue;
        }
        if (!('a' <= cRight && cRight <= 'z' || '0' <= cRight && cRight <= '9')) {
            j--;
            continue;
        }
        if (cLeft != cRight) {
            return false;
        }
        i++;
        j--;
    }
    return true;
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-palindrome

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!