递归反转字符串Java

时间:2017-06-26 18:33:21

标签: java string recursion

我试图以递归方式反转Java中的字符串,但我只是将最后一个字符作为输出。

我在网上查了一下,大部分代码都修改了输入字符串。我正在尝试将空字符串的输出构建为反向字符串。请告诉我我的课程有什么问题。

class reverseStringRecursion
{
    public static void main(String args[])
    {
        System.out.println(reverse());
    }

    public static String reverse()
    {
        String strInput = " Hello I am my name.";
        String output = "";
        return recursiveHelper(strInput, 0, output);
    }

    public static String recursiveHelper(String strInput, int index, String output)
    {
        if(index == (strInput.length() - 1 ))
            output += strInput.charAt(index) + "";
        else
            output+= recursiveHelper(strInput, index + 1, output) +"";

        return output;
    }
}

上面的代码返回输出'。'只有,没有别的。请帮助。

7 个答案:

答案 0 :(得分:3)

其他人已经很好地解释了为什么你的代码不起作用。为了比较,这是一个带有一些注释的工作版本:

public static void main(String args[])
{
    System.out.println(reverse("Hello I am my name."));
}

public static String reverse(String text)
{
    // Base case:
    // If the string is empty, we're done.
    if (text.length() == 0) {
        return "";
    } else {
        // reverse("hello") = reverse("ello") + "h"
        return reverse(text.substring(1)) + text.charAt(0);
    }
}

答案 1 :(得分:0)

由于strInput始终包含原始字符串,因此以下条件确保您的代码仅使用该字符串的最后一个字符并忽略所有其他字符:

if(index == (strInput.length() - 1 ))
    output += strInput.charAt(index) + "";

要以递归方式构建反向字符串,必须将字符串的最后一个字符附加到第一个长度() - 1个字符的子字符串的反面。

这意味着您不需要方法的第二个和第三个参数,并且strInput应该在每个递归调用中传递更短的String

public static String reverse (String strInput)
{
    if(strInput.length() <= 1)
        return strInput;
    else
        return strInput.charAt(strInput.length()-1) + reverse (strInput.substring(0,strInput.length()-1));
}

答案 2 :(得分:0)

由于Java中的String是不可移植的,因此在这种情况下通过参数传递它是无用的,所以我删除了它。

public class Main {
    public static void main(String args[]) {
        System.out.println(reverse());
    }

    public static String reverse() {
        String strInput = " Hello I am my name.";
        return recursiveHelper(strInput, 0);
    }

    public static String recursiveHelper(String strInput, int index) {
        String output;
        if(index == (strInput.length() - 1 )){
            output = strInput.charAt(index) + "";
        }else{
            output = recursiveHelper(strInput, index + 1) + strInput.charAt(index);
        }
        return output;
    }
}

Try it online!

答案 3 :(得分:0)

修改了你的课程:

public class ReverseStringRecursion {

    public static void main(String args[])
    {
        System.out.println(reverse());
    }

    public static String reverse()
    {
        String strInput = "My Name is Jane Doe";
        String output = "";
        return recursiveHelper(strInput,0);
    }

    public static String recursiveHelper(String strInput, int index)
    {
        if(index == (strInput.length() - 1 ))
            return "" + strInput.charAt(index) ;
        else 
            return recursiveHelper(strInput,index+1) + strInput.charAt(index);
    }
}

答案 4 :(得分:0)

我会将你的函数 recursiveHelper()改为只接收一个参数(你要反转的字符串)。使用Java中的substring方法,您可以这样做:

public static String recursiveHelper(String strInput) {
    if(strInput.length() == 1) {
        return strInput;
    }
    else if(strInput == "") {
        return "";
    }

    String subString1 = recursiveHelper(strInput.substring(0, strInput.length()/2));    // Here we copy the first half of the String to another String
    String subString2 = recursiveHelper(strInput.substring(strInput.length()/2));    // Here we do the same, but with the second half of the original String

    return susbString2 + subString1;    // It is very important that you sum the two substrings in this order!
}

答案 5 :(得分:0)

public class Main
{
    public static void main(String[] args) {

        String str1="abc";
        String str2="";
        for(int i=str1.length()-1;i>=0;i--)
        {
          str2=str2+Character.toString(str1.charAt(i));
        }
        System.out.println("After Reverse: "+str2);
    }
}

答案 6 :(得分:0)

1)基本情况 如果left> = right-不执行任何操作

2)否则交换s [left]和s [right}并调用helper(left + 1,right-1)]。

class Solution {
public void reverseString(char[] s) {
    int left = 0, right = s.length - 1;
    while (left < right) {
        char tmp = s[left];
        s[left++] = s[right];
        s[right--] = tmp;
    }
}

}