ビーニー・レオン:
長さのすべての文字列を計算するために:私は、再帰的なプログラムを書くためにしようとしている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
は空です。