文字列の配列数-Java

9401 ワード

タイトルの説明
大文字の英字のみを含む文字列Sを指定すると、Sを再配列するすべての異なる配列数を与える必要があります.例えば、SがABAであれば、ABA、AAB、BBAの3種類が異なる.
入力
10を超えない文字列Sを入力し、大文字であることを確認します.
しゅつりょく
S並び替えのすべての異なる配列数(自分自身を含む)を出力する.
サンプル
入力サンプル1 ABA出力サンプル1 3
入力サンプル2 ABCDEFGHHA出力サンプル2 907200
コード#コード#
アルゴリズム思想:再帰構造.
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;

public class SomeTest {
	static boolean[] visited=new boolean[10];
	static HashSet<String> result=new HashSet<String>();
	static int length;
	static StringBuilder tmp=new StringBuilder();
	static String str;

	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		
		while (sc.hasNext()){
			 str=sc.next();
			length=str.length();
			result.clear();
			tmp.delete(0, tmp.length());
			Arrays.fill(visited, false);
			getResult(1);
			System.out.println(result.size());
			
			
		}
		
	}
	
	public static void getResult(int n){
		
		if (n==length+1){
			result.add(tmp.toString());
		}
		
		for (int i=0;i<length;i++){
			
			if (!visited[i]){
			tmp.append(str.charAt(i));
			visited[i]=true;
			getResult(n+1);
			visited[i]=false;
			tmp.delete(tmp.length()-1, tmp.length());
			
		}
			
	}
	}
		

}