在没有反向函数或循环的情况下反转字符串

问题描述

所以我必须反转一个字符串,但是像一个例子一样,就是反转Hello World。好吧,我的代码像dlroW olleH一样将其反转,而您必须像World Hello一样反转它。这是我下面的代码,有人可以帮助我修复它,或者告诉我我做错了什么。创建新对象并通过该对象输入数据,然后调用方法时,我需要这样做。

public class reverseMe {
  public String reverseMe(String s) {
         if(s.length() == 0)
            return "";
            return s.charat(s.length() - 1) + reverseMe(s.substring(0,s.length()-1));
 }
}



解决方法

“没有反向功能或循环”是什么意思。首先,在Java中,方法被称为方法,而不是函数;其次,您需要以某种方式迭代字符串。这段代码仅使用递归方法完成工作。从构造函数调用它,就完成了。还没有内置的Java方法可以执行您想要的操作。

public class HelloWorld{


public String recursiveReverse(String[] words,StringBuilder b,int length){
     if (length < 0) 
        return b.toString();
     else{
        b.append(words[length] + " ");
        length--;
        return recursiveReverse(words,b,length);
     }
            
}

public String reverse (String input){
   String[] words = input.split(" ");
   StringBuilder reverse = new StringBuilder();
   return recursiveReverse(words,reverse,words.length-1);
}

     public static void main(String []args){
        HelloWorld a = new HelloWorld();
        System.out.println(a.reverse("hello this is a test reverse this string"));
     }
}

输出:

string this reverse test a is this hello
,

此答案假定以下条件:

  • 不能使用内置的reverse()功能,例如在StringBuilderCollections上找到的功能。

  • 不能使用循环。

  • 输入可以包含任意数量的单词。

  • 单词之间用一个空格隔开。

首先,最简单的解决方案是输入split(),然后使用Stream逻辑以相反的顺序组合单词,但是我认为Stream逻辑是“ Loop逻辑”,所以不会这样做。

这将使用递归方法作为解决方案,类似于问题中的尝试:

static String reverseWords(String input) {
    int idx = input.indexOf(' ');
    if (idx == -1)
        return input;
    return reverseWords(input.substring(idx + 1)) + ' ' + input.substring(0,idx);
}

测试

System.out.println(reverseWords("Hello World"));
System.out.println(reverseWords("The quick brown fox jumps over the lazy dog"));

输出

World Hello
dog lazy the over jumps fox brown quick The
,

我们可以使用代码,但是我们可以将其用于循环而不是CharAt。我的方法确实需要java.util.Arrays;才能获取给定数组的子集。请注意,您必须执行reverseMe(str.split(" "))才能运行它。

import java.util.Arrays;

public class reverseMe {
  public String reverseMe(String[] s) {
         if(s.length == 0)
            return "";
            return s[s.length - 1] + " " + reverseMe(Arrays.copyOfRange(s,s.length-1));
 }
}

输入:“ Hello Newer World”

输出:“世界较新的问候”

,

由于不能使用任何循环或反向方法,因此将留下递归方法。 但是,这不是很有效。

它的工作原理是:在字符串上反复拆分,减去前一个字符串的最后一个单词,然后以相反的顺序返回新的字符串。

ReverseMe r = new ReverseMe();                                                    
String reversed =r.reverseMe("This is a test of reversing a string");             
System.out.println(reversed);                                                     
                                                                                   
                                                                                      
public String reverseMe(String s) {
    String arr[] = s.split("\\s+");
    if (arr.length > 1) {
        return arr[arr.length-1] + " " + reverseMe(s.substring(0,s.lastIndexOf(" ")));           
    } 
    return arr[arr.length-1];
    
}

打印

string a reversing of test a is This