本帖最后由 胡文凡 于 2012-8-6 09:40 编辑
这段代码理解起来先是要理清它的思路:
默认s2为短串没错。然后是要看s1与s2的最大子串,就将s2按各种方法截取子字符串,要遍历完各种截取方法,然后看s1中是否包含了这段子串,有的话并且长度最长就是要求的最大子串了。
这个方法好处在遍历s2的截取方法中,每层循环按照截取的长度自减。遍历的完并且每层外循环截取的长度都自减1。如果有符合要求的子串就直接返回,因为那就是要的最大子串了。具体分析:
第一层外循环截取s2: 0~s2.length 长度:s2.length(从0开始计)
第二层外循环截取s2: 0~s2.length-1
1~s2.length 长度:s2.length-1
第三层外循环截取s2: 0~s2.lenth-2
1~s2.lenth-1
2~s2.lenth 长度:s2.lenth-2
依次类推。。。
如果有两个最大子字符串,则返回从左至右最先截取到的。
应该就是这样吧。。。。
补充一下,不是默认s2为短串。应为如果截取的长度过大比s1大的话。还是不能满足判断条件s1.contains(temp),得不到返回,所以不用默认s2是短串
|