打印一个字符串的全部子序列,要求不要出现重复字面值的子序列
package algorithmbasic.class18;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
public class PrintAllSubsquences2 {
public static List<String> subsNoRepeat(String s) {
char[] str = s.toCharArray();
List<String> ans = new LinkedList<>();
HashSet<String> set = new HashSet<>();
int index = 0;
String path = " ";
process(str, index, ans, path, set);
return ans;
}
public static void process(char[] str, int index, List<String> ans, String path, HashSet<String> set) {
if (index == str.length) {
if (!set.contains(path)) {
set.add(path);
ans.add(path);
}
return;
}
process(str, index + 1, ans, path + String.valueOf(str[index]), set);
process(str, index + 1, ans, path, set);
}
public static void main(String[] args) {
String test = "acccc";
List<String> ans2 = subsNoRepeat(test);
for (String str : ans2) {
System.out.println(str);
}
System.out.println("=================");
}
}