StringBuilder equals() 方法未按预期工作

问题描述 投票:0回答:1

我正在解决leetcode中的125.有效回文问题。对于测试用例“一个人,一个计划,一条运河:巴拿马”,代码如下。它返回错误:


class Solution {
    public boolean isPalindrome(String s) {


        StringBuilder s1= new StringBuilder();
        StringBuilder s2= new StringBuilder();

        for(int i=0;i<s.length();i++)
        {char curr= s.charAt(i);
            if((curr<=57 && curr>=48) || (curr>=97 && curr <=122) || (curr<=90 && curr >=65)){
                curr=Character.toLowerCase(curr);
                s1.append(curr);
            }
          
        }

s2.append(s1);
s2.reverse();
          if(s2.equals(s1)) {
                return true;
            }
        return false;
    }
}
java stringbuilder
1个回答
0
投票

这部分代码是问题所在:

if(s2.equals(s1)) {
    return true;
}

你在这里所做的是比较两个

StringBuilder
对象,它们显然总是不同的。您应该做的是比较使用这些构建器构建的
String
。要从构建器获取字符串,您需要使用
toString
方法。所以,你的代码应该是这样的:

if(s2.toString().equals(s1.toString())) {
    return true;
}

我已经使用此更改测试了您的代码,现在它可以正常工作。 我希望它有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.