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