자바에서 문자열 순열에 대한 재귀 방법

비니 렁 :

길이의 모든 문자열을 계산하기 위해 : 나는 재귀 프로그램을 작성하려고 해요 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=284425&siteId=1