Из вашего примера я вижу, что вам нужны все перестановки с повторением для 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
пусто.