0

たとえば、「abcd」= ab、ac、ad ...のように、一度にk個のn個のグループの可能なすべてのチームを生成したいと考えています。私はこれを書きましたが、文字列のすべての順列を生成します。2 つの文字列に同じ文字が含まれているかどうかを確認する方法を作成しましたが、これが正しい方法かどうかはわかりません。

package recursion;

import java.util.Arrays;

public class Permutations2 {

    public static void main(String[] args) {
        perm1("", "abcd");
        System.out.println(sameChars("kostas","kstosa"));
    }


    private static void perm1(String prefix, String s) {
        int N = s.length();
        if (N == 0){
            System.out.println(prefix);
        }
        else {
            for (int i = 0; i < N; i++) {
                perm1(prefix + s.charAt(i), s.substring(0, i) + s.substring(i+1, N));
            }
        }
    }

    private static boolean sameChars(String firstStr, String secondStr) {
        char[] first = firstStr.toCharArray();
        char[] second = secondStr.toCharArray();
        Arrays.sort(first);
        Arrays.sort(second);
        return Arrays.equals(first, second);
    }
}
4

3 に答える 3

0

これは再帰なしで機能するはずです:

private static void perm(String s) {
   char[] arr = s.toCharArray();     
   for (int i = 0; i < s.length() - 1; i++) {
      for(int j = i + 1; j < s.length(); j++) {
         System.out.println(String.valueOf(arr[i]) + String.valueOf(arr[j]));
      }
   }
}

O(n**2)です。

于 2013-06-04T21:59:31.290 に答える