【问题标题】:Finding the powerset of a String查找字符串的幂集
【发布时间】:2013-12-28 01:41:46
【问题描述】:

我正在尝试编写一个用于查找字符串子集的 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) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 始终复制/粘贴错误和异常输出。 3)标题中无需添加major标签。
  • 您可能会发现this article 信息丰富。

标签: java string substring powerset


【解决方案1】:

您的问题是,在您的 for 循环中,您正在遍历一个不断变化的列表。这会给你一个ConcurrentModificationException

最好先复制一份列表,然后再尝试遍历它。你想要这样的东西来代替你的 for 循环。

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

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

【讨论】:

  • 我正在使用递归来分解问题和迭代以将其重新绑定。您对如何改进解决方案或更好的方法有什么建议吗?谢谢
  • 不,真的,这根本不是你要做的。在递归的每个级别,通过将现有列表传递给subset 的调用来构建一半的幂集,而另一半在@​​987654326@ 循环中构建。为了保持一致性,我不会将现有列表传递给subset,然后我会在for 循环的每次迭代中添加两个元素,而不仅仅是一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
相关资源
最近更新 更多