Как использовать рекурсию для возврата массива подстрок - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь разбить строку на подстроки размера 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));



        }

Как бы вы вызывали последнюю функцию рекурсивно и как я бы рекурсивно сливал подстроки String.

Любой ввод приветствуется.

Ответы [ 2 ]

1 голос
/ 24 марта 2020

это то, что вы после? ArrayUtils.addAll () из apache общей библиотеки lang.

Хотя я не думаю, что это очень интуитивно и эффективно. итеративный способ является предпочтительным.

    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)));

    }
0 голосов
/ 25 марта 2020

Я считаю, что это то, что вы пытались сделать:

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)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...