java - Java中的字符串递归方法

标签 java string recursion substring

我正在尝试编写一个递归程序:计算可以由 string 中给出的所有字符组成的长度为 n 的所有字符串,但没有一个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));
            }
        }
    }

最佳答案

从您的示例中,我看到您想要 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 是多余的。

关于java - Java中的字符串递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60693943/

相关文章:

java - 在给定实例上重写compareTo方法的更简单方法

java - 获取相同类型的物体 - 三消风格游戏

javascript - 从数组中删除空字符串或空白字符串 - Javascript

android - 从databasehelper访问字符串资源

recursion - 合并 2 组间隔

java - Spring Boot @ManagedResource 组件在 Docker 中启动时在 VisualVM 中不可见,但可以在本地运行

java - 将 "strong"JRE 策略文件与 BouncyCaSTLe 一起使用

java - 如何修复我用compareTo()比较字符串的代码

python - 这个程序如何运作?

java - 从方法返回后如何停止递归