【问题标题】:How to use use recursion to return an array of substrings如何使用递归返回子字符串数组
【发布时间】:2020-03-23 20:26:04
【问题描述】:

我正在尝试将一个字符串分解为大小为 3 的子字符串,并将每个子字符串转换为字符串数组,并递归返回最终数组。

到目前为止,我有以下内容:

 private static String[] substrings(String string) {

    // base case
    if (string.length() <= 3) return new String[] { string };


            // this will return 
           return (Stream.concat(Arrays.stream(new String[]{string.substring(0,3)}), Arrays.stream(new String[] {string.substring(3)})).toArray(String[]::new));



        }

您将如何递归调用最后一个函数以及如何递归合并字符串子字符串。

任何意见表示赞赏。

【问题讨论】:

  • 如果你使用递归,我认为你不会想要使用流。

标签: java string recursion


【解决方案1】:

这就是你所追求的吗? ArrayUtils.addAll() 来自 apache 公共语言库。

虽然我不认为它非常直观和高效。迭代方式是首选。

    String[] substrings(String string){
        //exist condition
        if (string.length() <= 3) return new String[] { string };
        //get the substrings recursively
        String first = string.substring(0,3);
        return ArrayUtils.addAll(new String[] { first }, substrings(string.substring(3)));

    }

【讨论】:

    【解决方案2】:

    我相信这就是你想要做的:

    private static String[] substrings(String string) {
    
        // base case
        if (string.length() <= 3) {
            return new String[] { string };
        }
    
        // this will return 
        return Stream.concat(Stream.of(string.substring(0, 3)),
          Arrays.stream(substrings(string.substring(3))).toArray(String::new);
    }
    

    这是相当浪费的,因为它会在递归展开时创建大量数组。

    您可以通过返回 Stream 来解决此问题:

    private static Stream<String> substrings(String string) {
    
        // base case
        if (string.length() <= 3) {
            return Stream.of(string);
        }
    
        // this will return 
        return Stream.concat(Stream.of(string.substring(0, 3)), substrings(string.substring(3)));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2015-05-27
      • 2015-09-28
      • 2018-04-10
      • 2019-03-31
      • 2022-01-06
      • 1970-01-01
      相关资源
      最近更新 更多