您的位置:首页 > 编程语言 > Java开发

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

2017-05-23 13:01 363 查看

1 问题描述

从标准输入读入一个由字母构成的串(不大于30个字符)。

从该串中取出3个不重复的字符,求所有的取法。

取出的字符,要求按字母升序排列成一个串。

不同的取法输出顺序可以不考虑。

例如:
输入:
abc
则输出:
abc

输入:
abcd
则输出:
abc
abd
acd
bcd

输入:
abcaa
则输出:
abc

2 解决方案

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
public static ArrayList<Character> list = new ArrayList<Character>();
public static ArrayList<String> set = new ArrayList<String>();

public void dfs(int step, int now, int[] B) {
if(step == 3) {
StringBuffer s = new StringBuffer("");
s.append(list.get(B[0]));
s.append(list.get(B[1]));
s.append(list.get(B[2]));
if(!set.contains(s.toString()))
set.add(s.toString());
return;
} else {
for(int i = now + 1;i < list.size();i++) {
B[step] = i;
dfs(step + 1, i, B);
}
}
}

public void getResult(String A) {
char[] arrayA = A.toCharArray();
for(int i = 0;i < arrayA.length;i++)
if(!list.contains(arrayA[i]))
list.add(arrayA[i]);
Collections.sort(list);
int[] B = new int[3];
dfs(0, -1, B);
for(int i = 0;i < set.size();i++)
System.out.println(set.get(i));
}

public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String A = in.nextLine();
test.getResult(A);
}
}


[b]运行结果:[/b]

123454321
123
124
125
134
135
145
234
235
245
345
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: