繁体   English   中英

反转字符串而不反转 Function 或循环

[英]Reversing a String Without Reverse Function or loops

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

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



“没有反向 function 或循环”是什么意思? 首先,在 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"));
     }
}

Output:

string this reverse test a is this hello

这个答案假设如下:

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

  • 不能使用循环。

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

  • 单词由一个空格分隔。

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

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

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

Output

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,0,s.length-1));
 }
}

输入:“你好新世界”

Output:“世界更新你好”

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

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

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
                                                                                     

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM