package DataStructure;
import java.util.ArrayList;
import java.util.List;
public class PrintAllSubsequence {
public static List<String> subs(String s){
char[] str = s.toCharArray();
String path = "";
List<String> ans = new ArrayList<>();
process1(str , 0 , ans , path);
return ans;
}
//str 固定不变
//index 此时来到的位置 要或者不要
//如果index到达str的终止位置,就把沿途路径形成的答案 放入ans中
//之前做出的选择 就是path
public static void process1(char[] str , int index , List<String> ans , String path ) {
if (index == str.length) {
ans.add(path);
return;
}
String no = path;//之前的path继续往下传,不包含当前字符
process1(str, index + 1, ans, no);
String yes = path + String.valueOf(str[index]);//加上当前位置字符
process1(str, index + 1, ans, yes);
}
}
子序列:不能逆序,子部分。
思想:深度优先遍历。
如果想要不重复子序列 用hashset收集即可。