题目一
给定一个字符串,求所有的子序列
解题思路
对于字符串每个位置字符,选择添加或者不添加到结果串中,当遍历完字符串后将结果串放入到结果集中。
每个位置都有2个选择,所以时间复杂度为O(2^N)
代码
List<String> res = new ArrayList<>();
void rec(String s,int index,String temp){
if(index == s.length()){
res.add(temp);
return;
}
//不添加第index个字符
rec(s,index+1,temp);
//添加第index个字符
rec(s,index+1,temp + s.charAt(index));
}
题目二
给定一个字符串,求所有的子序列,要求返回的子序列没有重复的
解题思路
基本思路同题目一,不同的就是要求返回的子序列没有重复
所以只需要将存储结果的List变为HashSet就可以完成去重了
代码
HashSet<String> res = new HashSet<>();
void rec(String s,int index,String temp){
if(index == s.length()){
set.add(temp);
return;
}
//不选择第i个字符
rec(s,i+1,temp);
//选择第i个字符
rec(s,i+1,temp+s.charAt(i));
}