查找字符串的powerset

时间:2013-12-28 01:41:47

标签: 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,1);
        String rest = m.substring(1,m.length());
        for (String x : subset(rest,list)){
            list.add(letter + x);

        }

        list.add(letter);
        return list;
    }
}

1 个答案:

答案 0 :(得分:1)

你的问题是,在你的for循环中,你正在迭代一个不断变化的列表。这会为您提供ConcurrentModificationException

如果您在尝试迭代列表之前首先复制列表,那就更好了。你需要这样的东西代替你的for循环。

List<String> copy = new ArrayList<String>(subset(rest,list));
for (String x : copy){
   list.add(letter + x);
}

当然这是有效的(是的,我已经测试了它),但是你通过递归和其他方式通过迭代添加了一些元素的方式有点令人困惑。我认为重新设计会是一个好主意。