Перевернуть строку, используя рекурсию в Java - PullRequest
0 голосов
/ 27 октября 2019

Я хочу полностью изменить String. Например, «Cat is running» должен выдавать вывод «running is cat».

Я много пробовал, но не могу этого сделать. Это показывает "gninnur si taC". Пожалуйста, помогите мне, чтобы слово «кошка» использовалось как отдельный символ, а не «c» как отдельный символ.

Вот код:

public static void main(String[] args) {
    String str = "Cat is running";
    System.out.println("Before recursion: " + str);
    System.out.println("After recursion: " + reverse(str));
}

public static String reverse(String str) {
    if(str.isEmpty())
        return str;

    String s = "";
    for(int i = 0; i < str.length(); i++) {
        s = s + str.charAt(i);
    }
    return reverse(s.substring(1)) + s.charAt(0);   
}

Ответы [ 2 ]

4 голосов
/ 27 октября 2019

Вы должны найти первое слово в String, передать оставшуюся часть String рекурсивному вызову и добавить первое слово в конце:

public static String reverse(String str) {
    if(str.isEmpty() || !str.contains(" "))
        return str;

    int sep = str.indexOf(' ');
    return reverse(str.substring(sep+1)) + " " + str.substring(0,sep);   
}

Вывод:

Before recursion: Cat is running
After recursion: running is Cat

Кстати, цикл ваш оригинальный код бессмысленно. Вы можете просто использовать str напрямую вместо создания его копии.

Вы можете сделать его еще короче с помощью:

public static String reverse(String str) {
    int sep = str.indexOf(' ');
    return sep >= 0 ? reverse(str.substring(sep+1)) + " " + str.substring(0,sep) : str;
}
2 голосов
/ 27 октября 2019

Я думаю, что сделал это немного менее хорошим, чем @Eran, но я уже писал:

private static String reverse(String str) {
    if (str.isEmpty() || !str.contains(" "))
        return str;
    StringBuilder sb = new StringBuilder(" ");
    int i = 0;
    while (i < str.length() && str.charAt(i) != ' ') {
        sb.append(str.charAt(i));
        i++;
    }
    return reverse(str.substring(i + 1)) + sb.toString();
}
...