【问题标题】:How can I turn this boolean method into a recursive method? [closed]如何将此布尔方法转换为递归方法? [关闭]
【发布时间】:2021-06-27 20:00:37
【问题描述】:

因此,对于我的 CS 作业,我必须“编写一个布尔方法,该方法使用递归来确定字符串参数是否为回文。如果参数向前和向后读取相同,则该方法应返回 true”现在,我的代码按预期工作,但它不是递归方法,我不太确定如何使它成为递归方法。请告诉我!谢谢!

public class CS142hw3 {

    public static void main(String[] args) {
        palindrome();
    }

    static boolean palindrome() {
        String word = "kayak";
        String reverse = "";
        int len = word.length();

        for (int r = len - 1; r >= 0; r--)
            reverse = reverse + word.charAt(r);

        if (word.equals(reverse)) {
            System.out.println("True");
            return true;
        }
        else {
            System.out.println("False");
            return false;
        }
    }
}

【问题讨论】:

  • 取第一个和最后一个字符,比较两者 - 如果匹配,则调用递归方法,将两者都删除,继续直到字符串的长度小于或等于1。跨度>
  • 嗯,好主意。谢谢!

标签: java recursion methods boolean palindrome


【解决方案1】:

在实现递归函数时,应定义边缘/退出条件。

例如,如果输入字符串是null,则它不是回文。

如果输入字符串的长度小于2——即一个字符串为空或只包含一个字符,则为回文。

否则,检查输入字符串的第一个和最后一个字符或代码点是否相等(分别使用String::charAtString::codePointAt)以及剩余字符串是否为回文(剩余字符串可以使用String::substring获取)。

示例代码:

public static boolean isPalindrome(String input) {
    if (null == input) return false;

    int len = input.length();
    if (len < 2) return true;

    return input.codePointAt(0) == input.codePointAt(len - 1) 
        && isPalindrome(input.substring(1, len - 1));
}

免责声明:此方法不会对输入字符串进行预处理以将所有字符转换为相同的大小写,然后删除空格和/或标点符号以检查诸如Top spotsWas it a cat I saw? 等回文短语。

【讨论】:

  • 谢谢!这很有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-09
  • 2020-10-01
  • 2020-10-27
  • 1970-01-01
  • 2013-10-23
相关资源
最近更新 更多