【发布时间】:2016-01-22 00:12:57
【问题描述】:
正如标题所说,我需要执行以下操作。但不知何故我得到了错误的答案,也许循环有问题?
这是我到目前为止编写的代码,但它似乎给了我错误的结果。有什么想法、帮助、提示、修复吗?
import java.util.ArrayList;
public class pro1
{
private String lettersLeft;
private ArrayList<String> subsets;
public pro1(String input)
{
lettersLeft = input;
subsets = new ArrayList<String>();
}
public void createSubsets()
{
if(lettersLeft.length() == 1)
{
subsets.add(lettersLeft);
}
else
{
String removed = lettersLeft.substring(0,1);
lettersLeft = lettersLeft.substring(1);
createSubsets();
for (int i = 0; i <= lettersLeft.length(); i++)
{
String temp = removed + subsets.get(i);
subsets.add(temp);
}
subsets.add(removed);
}
}
public void showSubsets()
{
System.out.print(subsets);
}
}
我的测试班在这里:
public class pro1
{
public static void main(String[] args)
{
pro1s = new pro1("abba");
s.createSubsets();
s.showSubsets();
}
}
【问题讨论】:
-
我认为使用另一种方法更简单 - 如果字符串 X 的长度,生成 1 到 2**X 之间的所有数字 - 1。如果在二进制表示中位设置为 1 - 使用它作为元素的索引现有子集。
-
肯定有9个,不是11个,你只列出了10个,aba不是abba的子串?
-
@Adam 你是对的,计数错误(应该是 10),但请注意,他要求的是子集而不是子串。从他想要的输出中,很明显他想要字符串中有序字符集的唯一有序子集。
-
@Matthew 是的,抱歉,我看错了问题
标签: java string function recursion subset