1

我正在尝试使用递归来反转字符串,但特殊的转折是我必须从指定的索引开始返回包含在索引中的字符,然后反转该索引之后的剩余字符串并将两者组合成一个输出。我试图这样做,有时它会给出一个数组越界异常,有时会得到比它应该有的更多的字母,比如这个 helloooo 的测试以 lloooooo 的形式出现。任何有关调整此代码的帮助将不胜感激,因为当我知道需要第二个参数时,我真的迷路了。

  public class ReverseTest
    {
        public static void main(String[] argv) 
        {
            System.out.println(reverse("a", 0));
            System.out.println(reverse("hi", 0));
            System.out.println(reverse("helloooo", 2));
        }


        public final static String reverse(String s, int ind)
        {
            int length = s.length(); //get string length

            if (length <= 1) //if length is 1 or lower just repeat the string nothing to do
                return s; //return string
            else //if we have something to work with...
                return s.substring(ind) + reverse(s.substring(ind + 1, length - 1), ind); //return substring of necessary index + reverse the rest and display in one string
        }
    }
4

3 回答 3

1

不确定您的版本有什么问题,但我根据我发现的直观实现构建了自己的版本:

private static String reversePartially(String initial, int target) {
    return reversePartially(initial, target, target);
}

private static String reversePartially(String initial, int index, int target) {
    // if we are at the target index put the character at the front
    if(index == target) return initial.charAt(target) + reversePartially(initial, index + 1, target);
    // if we are in the second part return the characters reversed
    if(index > target) return reversePartially(initial, index + 1, target) + initial.charAt(index);
    // base condition
    if(index == initial.length()) return "";
    return "";
}
于 2012-07-14T01:06:04.660 回答
0

由于这可能是硬件,因此这里有一个提示。我认为你混淆了问题的两个部分

  1. 将子字符串从索引 i 反转到结尾
  2. 追加从 0 到 i-1 的子串到 i 的反转到 end

尝试将这两个分解为一个看起来像的函数

String reverse(String s);
String reversePart(String s, index i);

第二个函数将调用第一个函数。您可以编写一个递归函数来反转字符串,而无需使用索引参数。

于 2012-07-14T00:52:42.113 回答
0

这是上述问题的实际解决方案..此代码已测试..所有最好的..问候:Amit Sinha。

import java.io.*;
import java.lang.*;
import java.util.*;
public class RevString
{
    public String reverse(String s, int index )
        {
            if( index>0 )
            {
                return s.charAt( --index) + reverse( s, index);
            }
            return "";
        }
        public static void main(String[] args)throws IOException
        {
            DataInputStream in=new DataInputStream(System.in);
            String a;// the given string
            System.out.println("Enter a String");
            a=in.readLine();
            RevString obj=new RevString();
            int l=a.length();  // calculates Length of String
            System.out.println(obj.reverse(a,l));  // Pass Parameter as String, Length.
        }
}
于 2012-12-21T19:46:35.957 回答