目录
1 问题描述
从标准输入读入一个由字母构成的串(不大于30个字符)。
从该串中取出3个不重复的字符,求所有的取法。
取出的字符,要求按字母升序排列成一个串。
不同的取法输出顺序可以不考虑。
例如:
输入:
abc
则输出:
abc
输入:
abcd
则输出:
abc
abd
acd
bcd
输入:
abcaa
则输出:
abc
2 解决方案
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Scanner; 4 5 public class Main { 6 public static ArrayList<Character> list = new ArrayList<Character>(); 7 public static ArrayList<String> set = new ArrayList<String>(); 8 9 public void dfs(int step, int now, int[] B) { 10 if(step == 3) { 11 StringBuffer s = new StringBuffer(""); 12 s.append(list.get(B[0])); 13 s.append(list.get(B[1])); 14 s.append(list.get(B[2])); 15 if(!set.contains(s.toString())) 16 set.add(s.toString()); 17 return; 18 } else { 19 for(int i = now + 1;i < list.size();i++) { 20 B[step] = i; 21 dfs(step + 1, i, B); 22 } 23 } 24 } 25 26 public void getResult(String A) { 27 char[] arrayA = A.toCharArray(); 28 for(int i = 0;i < arrayA.length;i++) 29 if(!list.contains(arrayA[i])) 30 list.add(arrayA[i]); 31 Collections.sort(list); 32 int[] B = new int[3]; 33 dfs(0, -1, B); 34 for(int i = 0;i < set.size();i++) 35 System.out.println(set.get(i)); 36 } 37 38 public static void main(String[] args) { 39 Main test = new Main(); 40 Scanner in = new Scanner(System.in); 41 String A = in.nextLine(); 42 test.getResult(A); 43 } 44 }
运行结果:
123454321 123 124 125 134 135 145 234 235 245 345