开发者社区> 问答> 正文

Java中的字符串递归方法

我正在尝试编写一个递归程序:计算可以由中的所有字符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));
            }
        }
    }

问题来源:Stack Overflow

展开
收起
montos 2020-03-24 13:02:09 438 0
1 条回答
写回答
取消 提交回答
  • 从您的示例中,我看到您希望对字符进行重复的所有排列n,但是您的代码会生成对所有字符都没有重复的所有排列。

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

    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为空时追加是多余的。

    回答来源:Stack Overflow

    2020-03-24 13:02:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载