【问题标题】:combining strings using recursion使用递归组合字符串
【发布时间】:2012-04-17 10:45:32
【问题描述】:

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

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 语句中添加了一个测试,看看我的程序在哪里。

【问题讨论】:

  • 告诉你的输出应该是什么样子
  • @LiviuT。他们确实在示例的开头说明了预期的最终结果。
  • @LiviuT。查看第一个代码块的 cmets。
  • 尝试使用私有辅助函数,带有第三个参数。
  • 当我读到这个问题时,我觉得我的大脑僵住了 :) 对此感到抱歉

标签: java string recursion


【解决方案1】:

我认为类似以下的方法可能有效。

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"

【讨论】:

    【解决方案2】:

    你的代码的问题是:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-06-25
      • 2015-04-26
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      • 2020-08-04
      • 2021-12-11
      • 2023-02-24
      相关资源
      最近更新 更多