【发布时间】:2026-01-17 07:30:02
【问题描述】:
所以,我需要递归查找给定字符串的所有子集。到目前为止我所拥有的是:
static ArrayList<String> powerSet(String s){
ArrayList<String> ps = new ArrayList<String>();
ps.add(s);
for(int i=0; i<s.length(); i++){
String temp = s.replace(Character.toString(s.charAt(i)), "");
ArrayList<String> ps2 = powerSet(temp);
for(int j = 0; j < ps2.size(); j++){
ps.add(ps2.get(j));
}
}
return ps;
我想我现在知道问题出在哪里,但我不知道如何解决它。目前,我找到了所有 temp 的幂集,它们是“bcd”、“acd”、“abd”、“abc”,它们会导致重复。有想法该怎么解决这个吗?
通过powerset,我的意思是如果字符串是abc,它将返回“”,“a”,“b”,“c”,“ab”,“ac”,“bc”,“abc”。
【问题讨论】:
-
代码没有正确处理空字符串的边缘情况。所以,如果你用空字符串调用它,它会返回空字符串。
-
我想我现在知道问题出在哪里,但我不知道如何解决它。目前,我找到了所有 temp 的幂集,它们是“bcd”、“acd”、“abd”、“abc”,它们会导致重复。有关如何解决此问题的任何想法?
-
如果您想到算法遍历的树,那么有不止一种方法可以删除两个或多个字符(每个递归级别都会删除一个字符)。因此,当第一个 a 然后 b 是,当第一个 b 然后 a 被删除时,你会得到 c。
-
我看到了问题,我只是不知道如何做不同的事情。是否有快速解决此问题的方法,还是我应该从头开始?