对于这部分递归方法,我需要处理大于2的偶数长度字符串的情况(如我的基本情况所示)。我的问题是弄清楚如何使我的递归案例实际上接近我的基本案例。我不确定我是否也正确地执行了反转部分,因为基本情况从未被击中而导致Stack Overflow错误。 这是有问题的方法。 (我将在当前的'if'语句之后处理奇数字符串。我现在有“返回null”,所以我可以在没有奇数的情况下测试我的偶数情况。)
编辑: 输入示例:ABCDEF 示例输出:EBCDAF
public static String revEven(String inString)
{
String tempString = new String();
if (inString.length() <= 2)
return inString;
if (inString.length() == 3)
{
tempString += inString.charAt(2);
tempString += inString.charAt(1);
tempString += inString.charAt(0);
return tempString;
}
if (inString.length() % 2 == 0)
{
return revEven(inString.substring(0, inString.length() - 1) + inString.charAt(inString.length() - 1));
}
return null;
}
答案 0 :(得分:1)
你得到StackOverflowError的原因是你的字符串在递归调用之间不会改变。在再次调用该函数的行中,您只需重新创建初始字符串。
“ABCD”=“ABC”(子串(0,3))+“D”(charAt(3)) - 相同的字符串。
提示。不要尝试在递归调用中更改字符串。 也许最好将你的字符串表示为字符数组,在递归调用中更改索引,然后在偶数索引指向的地方交换字符。
我没有查看角落案件,但想法如下:
public static String runEven(String string) {
char[] array = runEvenImpl(string.toCharArray(), 0, string.length());
return new String(array);
}
public static char[] revEvenImpl(char[] array, int head, int tail) {
if (head == tail)
return array;
if (head % 2 == 0 && tail % 2 == 0)
{
swap(array, head, tail);
}
revEven(array, head+1, tail-1);
}