Java 查找字符串的powerset

Java 查找字符串的powerset,java,string,substring,powerset,Java,String,Substring,Powerset,我正试图编写一个java方法来查找字符串的子集,但我一直遇到一个运行时错误,我无法调试。代码如下: public static List<String> subset(String m, List<String> list){ if (m.length() <= 1){ list.add(m); return list; } else{ String letter = m.substring(0

我正试图编写一个java方法来查找字符串的子集,但我一直遇到一个运行时错误,我无法调试。代码如下:

public static List<String> subset(String m, List<String> list){
    if (m.length() <= 1){
        list.add(m);
        return list;
    }
    else{
        String letter = m.substring(0,1);
        String rest = m.substring(1,m.length());
        for (String x : subset(rest,list)){
            list.add(letter + x);

        }

        list.add(letter);
        return list;
    }
}
公共静态列表子集(字符串m,列表){

如果(m.length()您的问题是在
for
循环中,您正在迭代一个不断变化的列表。这会给您一个
ConcurrentModificationException

最好先复制一份列表,然后再尝试遍历它。您需要这样的内容来代替
for
循环

List<String> copy = new ArrayList<String>(subset(rest,list));
for (String x : copy){
   list.add(letter + x);
}
List copy=newarraylist(子集(rest,List));
用于(字符串x:副本){
列表。添加(字母+x);
}

当然,这是可行的(是的,我已经测试过了),但您通过递归添加了一些元素,而通过迭代添加了其他元素,这有点令人困惑。我认为重新设计将是一个好主意。

1)为了更快地获得更好的帮助,请发布一篇文章。2)始终复制/粘贴错误和异常输出。3)没有必要在标题中添加主标记。您可能会发现信息丰富。我正在使用递归分解问题,并使用迭代将其捆绑起来。您对如何改进解决方案或更好的方法有什么建议吗?谢谢,真的,这就是n在递归的每个级别上,一半的幂集是通过将现有列表传递到对
subset
的调用中来构建的,另一半是在
for
循环中构建的。为了一致性,我不会将现有列表传递到
subset
,然后我会添加两个元素,而不仅仅是一个,在
for
循环的每次迭代中。