【问题标题】:Check if a given word is a palindrome [duplicate]检查给定单词是否是回文[重复]
【发布时间】:2021-07-25 01:24:09
【问题描述】:

我正在尝试编写一种方法来检查给定单词是否为回文,但到目前为止它不起作用。我怀疑错误存在于 if 语句中,并且您没有将字符串等对象与== 进行比较,而是与equals 进行比较,对吗?但是 Java 不允许我写:if (firstHalf.charAt(i).equals(secondHalf.charAt(j))),那么我该怎么做才能让它工作呢?代码中是否还有其他错误?

public static boolean isPalindrome(String string) {
    String firstHalf = string.substring(0, string.length() / 2);
    String secondHalf = string.substring(string.length() / 2, string.length());
    for (int i = 0; i <= firstHalf.length(); i++) {
        for (int j = secondHalf.length(); j <= 0; j--) {
            if (firstHalf.charAt(i) == secondHalf.charAt(j)) {
                return true;
            }
        }
    }
    return false;
}

【问题讨论】:

  • 您可以对单个字符使用 ==,这很好。您的 j 循环递减,因此您应该检查 j>=0 而不是 j
  • 一旦找到匹配项,您也会返回 true,这是错误的。一切都需要匹配才能使字符串成为回文,而不仅仅是第一个和最后一个字符

标签: java methods palindrome


【解决方案1】:

为什么不这样做呢?

public static boolean isPalindrome(String string){
  StringBuilder sb = new StringBuilder(string);  
  sb.reverse();  
  return sb.toString().equals(string);
}  

【讨论】:

  • 非常好的代码,如果字符串很长,性能会很差。当然,由于这肯定是某种功课,所以表现并不重要。但是,由于这肯定是某种家庭作业,因此使用循环可能更有指导意义。
【解决方案2】:

你的性格测试倒退了。所有的比较都必须相等才能使 String 成为回文。

另外,不需要拆分String。您可以使用两个索引在逻辑上拆分 String

试试这个代码。

    public static boolean isPalindrome(String string) {
        int frontIndex = 0;
        int backIndex = string.length() - 1;
        while (frontIndex < backIndex) {
            if (string.charAt(frontIndex++) != string.charAt(backIndex--)) {
                return false;
            }
        }
        return true;
    }

【讨论】:

    【解决方案3】:

    你可以像这样把每个字符变成一个字符串 String s1 = "" + c1; 然后将它们与.equals(s1, s2)进行比较

    或者您可以使用Character 类,它是原始character 的包装器。 这也将使您能够使用c1.equals(c2)

    【讨论】:

    • 这里不需要equals。
    • 在哪里?第一种方式?
    • 在OP的代码中,==比较字符没有错
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 2016-04-19
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 2011-10-28
    相关资源
    最近更新 更多