反转串

/*
标题:反转串
内容:
我们把“cba”称为“abc”的反转串。
求一个串的反转串的方法很多。下面就是其中的一种方法,代码十分简洁(甚至有些神秘),
请聪明的你通过给出的一点点线索补充缺少的代码。

把填空的答案(仅填空处的答案,不包括题面)存入考生文件下对应题号的“解答.txt”中即可。

public static String reverseString(String x)
{
if(x==null || x.length()<2) return x;
return ____________________ + x.charAt(0);
}


*/

 1 class pro04 {
 2     public static void main (String[] args){
 3         System.out.println(fff.reverseString("cba"));
 4     }
 5     
 6     public static String reverseString(String x)
 7         {
 8             if(x==null || x.length()<2) return x;
 9             return reverseString(x.substring(1)) + x.charAt(0);
10         }
11 }

 

/*

递归题目总是让人有些烦躁,不静下心来分析,很难理解其中的逻辑关系,
首先,“cba”的反串为“abc”,
我们把“cba”带入reverseString(String x)中,
方法应该执行return ____________________ + x.charAt(0)一句,
而此时的x.charAt(0) = c,
所以 “____________________” 应返回“ab”,
那么如何让“____________________” 返回"ab"呢?
单由一句简单的代码肯定做不了这么复杂的工作,
所以“____________________”处肯定是递归调用了,
递归只能调用自己了,
但是everseString(String x)中参数应该怎么传呢?


我们把上边分析的过程看做递归的第一层,则第一层返回的是:"____________________ + x.charAt(0)",
而到了第二层,因为不满足第一句,"if(x==null || x.length()<2)"
所以仍然返回第二句,"____________________ + x.charAt(0)";
而第一层“____________________”处为“ab”,
所以第二层,x.charAt(0)应为“b”;
到了第三层,就满足了"if(x==null || x.length()<2)",所以返回“a”;

理清了思路之后,我们发现“____________________”处应为“x”本身的一个去掉第一个字母的字串,
然后我就套了一个函数,试一下,居然对了,
reverseString(x.substring(1))
reverseString(x.substring(1,x.length())) 也是对的
代码填空题,有的时候理不清思路,套一套答案也是一种方法,

其中:
public String substring(int beginIndex)

返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。
例如:

"unhappy".substring(2) returns "happy"
"Harbison".substring(3) returns "bison"
"emptiness".substring(9) returns "" (an empty string)

public String substring(int beginIndex,int endIndex)

返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的 beginIndex 处开始,一直到索引 endIndex - 1 处的字符。因此,该子字符串的长度为 endIndex-beginIndex。
示例:

"hamburger".substring(4, 8) returns "urge"
"smiles".substring(1, 5) returns "mile"


*/

posted on 2013-05-03 09:51  wsxjbcy  阅读(196)  评论(0编辑  收藏  举报

导航