首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Leetcode有效回文问题调试

Leetcode有效回文问题调试
EN

Stack Overflow用户
提问于 2020-05-18 23:04:05
回答 3查看 141关注 0票数 3

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

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

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

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

代码语言:javascript
复制
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;

}
}
EN

回答 3

Stack Overflow用户

发布于 2020-05-18 23:10:07

您的replaceAll方法不正确

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

代码语言:javascript
复制
s = s.replaceAll("[^a-zA-Z]+","");

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

如果您想要匹配所有字母,而不考虑语言,请使用以下命令:

代码语言:javascript
复制
s = s.replace("\\P{L}", "");

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

代码语言:javascript
复制
class Solution {
  public boolean isPalindrome(String s) {
    s = s.replaceAll("\\P{L}", "");
    return new StringBuilder(s).reverse().toString().equalsIgnoreCase(s);
  }
}
票数 3
EN

Stack Overflow用户

发布于 2020-05-18 23:11:26

您的正则表达式无效。试试这个:

代码语言:javascript
复制
s = s.replaceAll("[\\W]+", "");

\W用于非字母数字的任何内容。

票数 2
EN

Stack Overflow用户

发布于 2020-05-18 23:12:21

对于s.replaceAll("\\s+","");,您只删除了空格,但您还必须删除除字母数字字符之外的任何字符,例如标点符号,在本例中为,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61872613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档