【问题标题】:Reversing a String of words with recursion用递归反转一串单词
【发布时间】:2020-02-13 16:10:38
【问题描述】:

我正在尝试在 java 中反转一个完整的字符串

例如,Good morning,因此输出应返回 morning good

我尝试了以下功能

public static String reverse(String s)
    {
        if (s.isEmpty())
            return s;
        //int n = 0;
        return reverse(s.substring(1)) + s.charAt(0);

    }

但上面的函数是将good morning 转换为gninrom doog。我的代码适用于每个字符,我如何使它适用于单词。任何提示或指南/解释将不胜感激。

我已经问过this 问题但没有解决我的问题

更新:

在@snr answer 和 @NathanHughes cmets 的帮助下尝试以下代码

public static String reverse(String s)
    {
        int s1 = s.indexOf(" ");


        if (s1 != -1) 
        {
         return reverse(s.substring(s1+1)) + s.substring(0,s1);
        }
        else
        {
            return "-1";
        }
    }

但是输出是

-1good

【问题讨论】:

  • 如果你知道如何将字符串拆分成单词,你能从那里解决问题吗?您是否研究过如何将字符串拆分为单词?
  • s.substring(1) 为您提供第一个字符为 s 的字符串。这不是你想要的。
  • @ScottHunter 你的意思是 s.split(" ");在我的情况下?
  • @M.普罗霍罗夫想多了,假设空格分隔单词。你的提示是:使用 indexOf 和 substring.
  • @M. Prokhorov:练习基本递归似乎是一个玩具问题,识别单词边界很有趣,但似乎与我对问题的解释没有直接关系。显然,如果我们将其扩展到 CJK 字符集,那么识别单词边界会变得非常困难。

标签: java recursion


【解决方案1】:

这可能不是最有效的方法,但它确实有效:

public static String reverse(String s) {
    String[] wordList;
    wordList = s.split(" ");
    String reverseWordList = "";

    for (int i = 1; i <= wordList.length; i++) {
        reverseWordList += wordList[wordList.length - i] + " ";
    }

    reverseWordList = reverseWordList.trim();
    return reverseWordList;
}

【讨论】:

  • 操作要求recursion
【解决方案2】:

首先,您需要知道空格在哪里。

public static String reverse(String str) {
   int space = str.indexOf(" ");
   return space == -1 ? str : reverse(str.substring(space + 1)) + " " + str.substring(0, space);
}

【讨论】:

  • 你能帮我解决我哪里出错的代码吗?
  • @AHF 您需要返回s 而不是"-1",后者是一个由"-""1" 两个字符组成的字符串文字,在您的代码中连续出现。此外,您忘记了添加空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 2020-07-20
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 2018-11-16
相关资源
最近更新 更多