问题描述:
• 从键盘读入一个由字母构成的串(不大于30个字符)。
• 从该串中取出3个不重复的字符,求所有的取法。
• 取出的字符,要求按字母升序排列成一个串。
• 不同的取法输出顺序可以不考虑。
• 例如:
• 输入:
• abc
• 则输出:
• abc
• 输入:
• abcd
• 则输出:
• abc
• abd
• acd
• bcd
•输入:
• abcaa
• 则输出:
• abc
思路分析:
首先将字符串去重,我们使用set集合进行去重(因为set集合中不能加入重复的的字符),也可以直接循环去重,然后将字符串转换为字符数组,对字符数组进行排序,最后三层循环直接输出即可(也可以使用循环递归(dfs),本质上是一样的)。
具体见代码注释:
import java.util.*;
public class Qzf {
//取字符
public static void solve2(char[]b)
{//利用三层循环输出数组字符
for (int i = 0; i <=b.length-2 ; i++) {
for (int j = i+1; j <b.length ; j++) {
for (int k = j+1; k <b.length ; k++) {
System.out.print(b[i]);
System.out.print(b[j]);
System.out.println(b[k]);
}
}
}
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);//字符串输入
String a=scanner.nextLine();
Set<Character> set=new HashSet<>();//建立set集合 去重
for (int i = 0; i <a.length() ; i++) {
set.add(a.charAt(i));
}
char []b=new char[set.size()];
Iterator iterator=set.iterator();//利用迭代器取出set集合中的元素
int begin=0;
while (iterator.hasNext())
{
b[begin]=iterator.next().toString().toCharArray()[0];
begin++;
}
Arrays.sort(b);//对b数组进行排序 便于字典序列数组
solve2(b);
}
}
运行结果如下: