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));
            }
        }
    }
Mireaラドゥ:

あなたの例から、私はあなたがすべての順列たいことがわかり繰り返しで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は空です。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=284585&siteId=1