java - Leetcode Valid Palindrome 问题调试

标签 java palindrome

<分区>

我正在努力理解我的代码对于这个 Leetcode 问题有什么问题。

问题:给定一个字符串,判断它是否是回文,只考虑字母数字字符,忽略大小写。

现在,我通过了 108/476 个案例,但我没有通过这个测试:“一个人,一个计划,一条运河:巴拿马”。

这是我的代码,请帮我找出问题所在!

class Solution {
public boolean isPalindrome(String s) {

    if (s.isEmpty()) return true;

    s.replaceAll("\\s+","");

    int i = 0;
    int j = s.length() - 1;

    while (i <= j) {

        if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(j))) {

            return false;

        }

        i++;
        j--;

    }

    return true;

}
}

最佳答案

您的 replaceAll 方法不正确

您的replaceAll 方法目前仅删除空格。它应该删除所有特殊字符并只保留字母。如果我们像您一样使用正则表达式,这是最好的正则表达式之一:

s = s.replaceAll("[^a-zA-Z]+","");

您可能想改用 \W(或 [^\w]),但这个最新的正则表达式匹配 [a-zA-Z0 -9_],包括数字和下划线字符。这是你想要的吗?然后去使用 \W 代替。如果没有,请坚持 [^a-zA-Z]

如果你想匹配所有的字母,不管是什么语言,使用下面的:

s = s.replace("\\P{L}", "");

请注意,您可以像这样大幅缩短代码,尽管它绝对不是最快的:

class Solution {
  public boolean isPalindrome(String s) {
    s = s.replaceAll("\\P{L}", "");
    return new StringBuilder(s).reverse().toString().equalsIgnoreCase(s);
  }
}

关于java - Leetcode Valid Palindrome 问题调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61872613/

相关文章:

java - 如何从 Map<String,Integer> 中获取最后一个元素

java - TableView 未显示正确的内容

c - 在数组中找到第一个伪回文

c - 将 0110 打印为回文

java - Hibernate 在合并后复制对象

java - wadl-client-plugin 在 Java 10 上失败

java - 用java读取excel中的特定列

python - 求两个三位数的最大回文积 : what is the error in logic?

code-golf - 回文高尔夫

c++ - 比较不包括标点符号和空格的字符串