Java 查找字符串的powerset
我正试图编写一个java方法来查找字符串的子集,但我一直遇到一个运行时错误,我无法调试。代码如下: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
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
循环的每次迭代中。