用于反转字符串中单词的程序[关闭]

问题描述 投票:0回答:4

我编写了一个程序来反转字符串中的单词。如果i / p是“狗正在追逐”那么o / p应该是“追逐是狗”

public class String_reverse {

    public static void main(String[] args) {

        String input= "The dog is chasing";

        String[] arr= input.split(" ");
        String reverse="";
        for(int i=arr.length-1;i>=0;i--)
        {
            reverse+= ((reverse.equals(""))?"":" ")+arr[i];
        }
        System.out.println(reverse);

    }

}

但我不知道如何使用递归编写这个程序。当我尝试在stackoverflow中搜索时,我可以找到反转字符串;但不能反转字符串中的单词。

java recursion
4个回答
1
投票

Recursive methods在开始时看起来有点困难但是尝试做以下事情:

  • 尽可能简化问题,找到自己解决的不太复杂的案例。 (例如,您可以使用带有两个单词的句子)。
  • 首先在纸上做,使用Pseudocode帮助您用最简单的语言处理问题。
  • 开始编码,不要忘记逃避你的递归。

public static void main(String[] args) {
    String s = reverseSentence("This sentence will be reversed - I swear".split(" "));
    System.out.println(s);
}

public static String reverseSentence(String[] sentence){
    if (sentence.length <= 1){
        return sentence[0];
    }
    String[] newArray = new String[sentence.length-1];
    for (int i = 0 ; i < newArray.length ; i++){
        newArray[i] = sentence[i];
    }
    return sentence[sentence.length-1] + " " + reverseSentence(newArray);
}

2
投票

递归方法,使用与linked "duplicate"相同的逻辑,不使用split()

private static String reverseWords(String text) {
    int idx = text.indexOf(' ');
    return (idx == -1 ? text : reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx));
}

逻辑是:

  1. 拿第一个字母/单词
  2. 如果那是最后一个字符/单词,则返回它
  3. 使用剩余文本执行递归调用(不包括单词分隔空间)。
  4. 追加空间(如果做的话)
  5. 附加第1步中的第一个字符/单词
  6. 返回结果

如您所见,当应用于反转文本(字符)而不是单词时,它非常相似:

private static String reverseText(String text) {
    return (text.length() <= 1 ? text : reverseText(text.substring(1)) + text.charAt(0));
}

对于那些喜欢拼写的东西并且不喜欢三元运算符的人来说,这里是长版本,有额外的括号并支持空值:

private static String reverseWords(String text) {
    if (text == null) {
        return null;
    }
    int idx = text.indexOf(' ');
    if (idx == -1) {
        return text;
    }
    return reverseWords(text.substring(idx + 1)) + ' ' + text.substring(0, idx);
}
private static String reverseText(String text) {
    if (text == null || text.length() <= 1) {
        return text;
    }
    return reverseText(text.substring(1)) + text.charAt(0);
}

请注意reverseText()的长版本与链接副本中的版本完全相同。


1
投票

这是一个示例程序,它将以递归方式执行您想要的操作:

public class ReverseWords {
    public static void main(String args[]) {
        String s = "This is a test";
        reverse(s);
    }

    private static void reverse(String s) {
        if(s == null) return;
        String words[] = s.split(" ", 2);
        if (words.length < 2) reverse(null);
        else reverse(words[1]);
        System.out.print(words[0] + " ");
    }
}

1
投票

您可以参考以下代码。

  class ReverseString {

public static void main(String args[]) {
    String myString = "The dog is chasing";

    reverse(myString);
}

public static String reverse(String myString) {
    int space = myString.indexOf(" ");
    if (space != -1) {
        reverse(myString.substring(space + 1, myString.length()));
    }
    if (space == -1) {
        System.out.println(myString.substring(0, myString.length()));
    } else {
        System.out.println(myString.substring(0, space));
    }
    return myString;
}
}
© www.soinside.com 2019 - 2024. All rights reserved.