Java实现 串中取3个不重复字母

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

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

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

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

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

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

输入:
abcaa
则输出:
abc

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);
    }
}
原文地址:https://www.cnblogs.com/a1439775520/p/12947810.html