使用递归java的FindSpace方法

使用递归java的FindSpace方法,java,recursion,arrayofstring,Java,Recursion,Arrayofstring,我正在尝试编写一个方法,该方法接受字符串的输入,并通过检查字符串的某些部分是否与字典中的单词匹配,返回可能包含逻辑空格的字符串列表。例如: 例如: input: "becausetodayuseat" Output: { "be cause to day us eat ", "be cause to day use at ", "be cause today us eat ", "be cause today use at ", "because to

我正在尝试编写一个方法,该方法接受字符串的输入,并通过检查字符串的某些部分是否与字典中的单词匹配,返回可能包含逻辑空格的字符串列表。例如:

例如:

input: "becausetodayuseat" 
Output: {
    "be cause to day us eat ",
    "be cause to day use at ",
    "be cause today us eat ",
    "be cause today use at ",
    "because to day us eat ",
    "because to day use at ",
    "because today us eat ",
    "because today use at "
}
我的代码目前是

public static String[] space(String[] dict, String s) {
    LinkedList<String> ret = new LinkedList<String>();

    // base case

    if (s.length() == 0) {
        String[] r = { "" };
        return r;
    }


    for (int i = 1; i < s.length(); i++) {
        String prefix = s.substring(0, i);
        if (inDictionary(dict, prefix)) {
            prefix = prefix + " ";
            ret.add(prefix);
            String suffix = s.substring(i);
            String[] end = space(dict,suffix);
            //System.out.println(end.length);
            for (int j = 0; j < end.length; ++j) {
                ret.add(end[j]);
            }

        }
    }

    // This line converts LinkedList<String> to String []
    return ret.toArray(new String[0]);

任何帮助都将不胜感激:)

在不提供实际实施的情况下仔细思考:

在每个步骤中,我们可以添加空间,也可以不添加空间。我们可以把这个问题看作是一棵二叉树。在树中的每一步,如果当前的“活动序列”是一个单词,我们会添加一个空格,并且我们也会尝试不添加空格。让我们看一下输入
,因为

b
不是一个词,所以我们继续使用
“+空格(“因为”)
这是一个词,所以现在我们有
“be”+空格(“原因”)
空格(“因为”)


我们继续到基本情况。

编辑:对不起,读到fast,它只给出一个结果。我再想一想

试试这个

public String parse(String s, HashMap<String, String> map,String dict[]) {
    if (map.containsKey(s)) {
        return map.get(s);
    }
    if (inDictionary(s)) {
        return s;
    }
    for (int left = 1; left < s.length(); left++) {
        String leftSub = s.substring(0, left);
        if (!inDictionary(leftSub)) {
            continue;
        }
        String rightSub = s.substring(left);
        String rightParsed = parse(rightSub, map,dict);
        if (rightParsed != null) {
            String parsed = leftSub + " " + rightParsed;
            map.put(s, parsed);
            return parsed;
        }
    }
    map.put(s, null);
    return null;
 }
公共字符串解析(字符串s、HashMap映射、字符串dict[]{
若有(地图集装箱箱){
返回地图。获取(s);
}
如果(起诉的){
返回s;
}
for(int left=1;left
称之为:
您的\u object.parse(您的\u字符串、新的HashMap()、您的\u dict)

您现在分别添加前缀和后缀。一旦你找到一个单词,你需要在它后面加上所有可能的后缀,然后把它添加到你的集合中

伪代码:

if word found
    foreach end in ends
        result.add(word + ' ' + end)

请详细说明哪些不适合您。我在你的帖子中没有看到任何问题,我重新格式化了预期和实际输出;我希望这能澄清问题。欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。具体来说,您发布的代码应该生成给定的输出。你的驱动程序不是独立运行的。我建议你编写一个驱动程序,构建一个小字典并调用你的例程。还插入一些有用的跟踪打印语句,以显示程序流中发生的情况。
if word found
    foreach end in ends
        result.add(word + ' ' + end)