使用递归组合字符串

时间:2012-04-03 18:19:08

标签: java string recursion

所以我在递归的最后一部分上遇到了一些麻烦。该方法需要使用递归来返回一个字符串,该字符串由“编织”在一起形成两个作为参数的字符串。例如:

weave("aaaa", "bbbb") // should return the string "abababab"
weave("hello", "world") // should return the string "hweolrllod"
weave("recurse", "NOW") // should return the string "rNeOcWurse"

请注意,第一个字符串中的额外字符 - “urse”中的字符 - 来自编织在一起的字符后。

重要的(也是令人讨厌的)是我不允许使用任何迭代循环(for,while,do while)。

到目前为止,这是我的代码:

public static String weave(String str1, String str2)
{
    String word = str1 + str2;
    if(str1 == null || str1.equals("") || str2 == null || str2.equals(""))
    {
        return word;
    }              
    String word1 = weave(str1.substring(0, str1.length() - 1), str2.substring(0, str2.length() - 1));
    System.out.println(word1);
    return word;
}

对于(Hello,World),我的输出是:

HW
HeWo
HelWor
HellWorl
HelloWorld

显然我的角色没有编织,所以我不知道该怎么做!而且,如上所述,该方法不应该打印。我刚刚在println语句中添加了一个测试,以查看我的程序在哪里。

2 个答案:

答案 0 :(得分:5)

我认为以下内容可能有用。

public String weave(String str1, String str2)
{
  if(str1.isEmpty() || str2.isEmpty()) {
    return str1 + str2;
  }
  return str1.substring(0, 1) + str2.substring(0, 1) + weave(str1.substring(1), str2.substring(1));
}

这个想法非常简单:你只需要从两个输入字符串中弹出第一个字符并连接两个字符和返回的值,使用剥离的输入字符串递归调用函数,直到其中一个输入字符串为空你应该只返回非空字符串。

weave("abcdef", "12"): "a" + "1" + weave("bcdef", "2")
  |
  +- weave("bcdef", "2"): "b" + "2" + weave("cdef", "")
       |
       +- weave("cdef", ""): "cdef"

导致:

weave("abcdef", "12"): "a" + "1" + "b" + "2" + "cdef": "a1b2cdef"

答案 1 :(得分:0)

您的代码存在问题:

String word = str1 + str2;
//...
return word;

无论递归调用如何,最后它只会在传入“hello”,“world”时返回第一个方法调用的结果。

String word = str1 + str2; //hello + world
//... other things and the recursive call doesn't matter
//return word; //return the first word variable which is helloworld