【问题标题】:String Recursion Method in JavaJava中的字符串递归方法
【发布时间】:2020-06-26 20:31:57
【问题描述】:

我正在尝试编写一个递归程序:计算所有长度为n 的字符串,这些字符串可以由string 中给出的所有字符组成,但不允许出现sub 中列出的所有字符串作为子串。

这是我到目前为止写的程序,但它还没有实现sub的限制,它只计算string的排列。

    public static void method(String string)
    {
        method(string, "");
    }
    public static void method(String string, String soFar)
    {
        if (string.isEmpty())
        {
            System.err.println(soFar + string);
        }
        else
        {
            for (int i = 0; i < string.length(); i++)
            {
                method(string.substring(0, i) + string.substring(i + 1, string.length()), soFar + string.charAt(i));
            }
        }
    }

【问题讨论】:

    标签: java string recursion substring


    【解决方案1】:

    从您的示例中,我看到您希望 n 字符的所有排列重复,但是您的代码为 all 生成所有排列不重复强>字符。

    这应该可以解决您的问题,如示例中所述:

        public static List<String> method(String string, int n, List<String> sub)
        {
            List<String> results = new ArrayList<>();
            method(string, n, "", sub, results);
            return results;
        }
        private static void method(String string, int n,  String soFar, List<String> sub, List<String> results)
        {
            for (String s: sub)
            {
                if(soFar.length() >= s.length() && soFar.substring(soFar.length() - s.length()).equals(s))
                {
                    return;
                }
            }
            if (soFar.length() == n)
            {
                results.add(soFar);
            }
            else
            {
                for (int i = 0; i < string.length(); i++)
                {
                    method(string, n, soFar + string.charAt(i), sub, results);
                }
            }
        }
    

    另外,当string 为空时附加string 是多余的。

    【讨论】:

    • 我正在尝试运行程序,但是第一种方法只能有String stringint nList&lt;String&gt; sub这三个变量。我将结果作为变量取出,但我不太确定在第二行调用method 时如何传递一个空列表(对于result)。 (可能是个愚蠢的问题,抱歉,还在学习中!)
    • 您可以在方法之外将其声明为private static List&lt;String&gt; results = new ArrayList&lt;&gt;();,但我不建议在这种情况下使用它,除非您想存储多个方法调用的所有结果。
    • 我在测试仪中也收到一个错误,说 void 无法转换为 java.util.List
    • 我仍然遇到同样的错误,我添加了测试仪以便您查看
    • 哦,我刚刚重新复制并粘贴了它,它正在工作。它通过了测试,非常感谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    相关资源
    最近更新 更多