算法笔记_222:串中取3个不重复字母(Java)

目录

1 问题描述

2 解决方案

 


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

 

posted @ 2017-05-23 13:01  舞动的心  阅读(654)  评论(0编辑  收藏  举报