package class11; import java.util.ArrayList; import java.util.HashSet; import java.util.List; public class Code02_PrintAllSubsquences { public static List subs(String s) { char[] str = s.toCharArray(); String path = ""; List ans = new ArrayList<>(); process1(str, 0, ans, path); return ans; } public static void process1(char[] str, int index, List ans, String path) { if (index == str.length) { ans.add(path); return; } String no = path; process1(str, index + 1, ans, no); String yes = path + String.valueOf(str[index]); process1(str, index + 1, ans, yes); } public static List subsNoRepeat(String s) { char[] str = s.toCharArray(); String path = ""; HashSet set = new HashSet<>(); process2(str, 0, set, path); List ans = new ArrayList<>(); for (String cur : set) { ans.add(cur); } return ans; } public static void process2(char[] str, int index, HashSet set, String path) { if (index == str.length) { set.add(path); return; } String no = path; process2(str, index + 1, set, no); String yes = path + String.valueOf(str[index]); process2(str, index + 1, set, yes); } public static void main(String[] args) { String test = "aacc"; List ans1 = subs(test); List ans2 = subsNoRepeat(test); for (String str : ans1) { System.out.println(str); } System.out.println("================="); for (String str : ans2) { System.out.println(str); } System.out.println("================="); } }