如果我搞砸了,请原谅我,这是我的第一个问题。我已经研究这个问题几个小时了。它应该使用递归生成字符串中的所有字符子集(不一定是子字符串)。我评论了很多,所以你可以看到我的想法,并希望能告诉我哪里出错了。如果这有什么不同,我将使用 Eclipse 作为 IDE。
import java.util.ArrayList;
//Generates subsets of a string
public class SubsetGenerator
{
private String original;
private String remaining;
private ArrayList<String> subsets;
//Constructs a subset generator
//@param input string to have subsets generated
public SubsetGenerator(String input)
{
original = input;
remaining = original;
subsets = new ArrayList<String>();
}
public void printSubsets()
{
System.out.print(subsets);
}
//gets subsets
public void generateSubsets()
{
//if the string is empty, it has no subsets
if(remaining.length() == 1)
{
subsets.add(remaining);
return;
}
else
{
//remove the first character and hold onto it
String removed = remaining.substring(0,1);
remaining = remaining.substring(1);
//recursion. Eventually it should add the last character in the string to the ArrayList and return
generateSubsets();
//Take each element that is in the ArrayList, add the removed character to it, add this back to the list
for (int i = 0; i < subsets.size(); i++)
{
String temp = removed + subsets.get(i);
subsets.add(temp);
}
subsets.add(removed);//add the removed character by itself
return;
}
}
}
这些是我得到的错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3221)
at java.lang.String.<init>(String.java:233)
at java.lang.StringBuilder.toString(StringBuilder.java:447)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:41)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:37)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:37)
at SubsetGenerator.generateSubsets(SubsetGenerator.java:37)
at SubsetGeneratorTester.main(SubsetGeneratorTester.java:7)
我已经使用以下代码对其进行了测试:
public class SubsetGeneratorTester
{
public static void main(String[] args)
{
SubsetGenerator s = new SubsetGenerator("world");
s.generateSubsets();
s.printSubsets();
}
}