A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 薆情媬証書 中级黑马   /  2013-10-10 16:24  /  2227 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这段代码来至毕老师的java视频中的一个练习:
题目:
        获取两个字符串中最大相同子串。
其中的一个循环是(如下图):

请亲们,使用通俗易懂的语言帮我分析分析这个循环,看了几遍视频,都不懂,其实讲的原理是懂得,
但代码就不是很清楚了,这种循环看着好晕!!!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1 去新版块发帖提问吧

查看全部评分

12 个回复

倒序浏览
上面图片要是看不清,看下面一段类似的代码也行:
  1. public static void getMax(String s1, String s2)
  2.         {
  3.                 String ls = s1.length()>s2.length() ? s1:s2;
  4.                 String ss = ls==s1 ? s2:s1;
  5.                 for (int i=0; i<ss.length() ; i++ )
  6.                 {
  7.                         for (int y=0,z=ss.length()-i; z!=ss.length()+1 ; y++,z++ )
  8.                         {
  9.                                 String temp = ss.substring(y,z);
  10.                                 System.out.println(temp);
  11.                         }
  12.                 }
  13.         }
复制代码
回复 使用道具 举报
以前分析这个自己画的图,希望对你有帮助。

它的主要思想,就是要从长到短去找出这个字串的所有组合,
若另一个字符串中包含其中一个组合就ok了,
i 主要是为限定z值的,告知z这次循环开始应该标志在哪里作为尾部,
y一直从0开始,而后随z一起移动,保证这次循环能取出同等长度的另一个字串
短字符串所有组合都出来了,找最大相同字串也就清楚了

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
额,这传上去图片真小啊,
如果你需要,反正我这个也是现成的,

最大字串for分析图.zip

78.94 KB, 下载次数: 175

回复 使用道具 举报
  • public static void getMax(String s1, String s2)
  •         {
  •                 String ls = s1.length()>s2.length() ? s1:s2;    //将长的字符串赋予ls
  •                 String ss = ls==s1 ? s2:s1;                     //将短的字符串赋予ss
  •                B: for (int i=0; i<ss.length() ; i++ )             //循环获取字符串 最长不能大于ss
  •                 {                                               //这里每次循环获得的是长度为ss.length()-i 的所有字符串
  •                       A: for (int y=0,z=ss.length()-i; z!=ss.length()+1 ; y++,z++ )//这里的z就是每次循环时z的最大长度,而y,z都+1就是整个框向右移动
  •                         {
  •                                 String temp = ss.substring(y,z);                  //这里y,z是获取的边界
  •                                 System.out.println(temp);
  •                         }
  •                 }
  •         }
  • 其实这个代码相当于给你这个数字串[ 1,2,3,4,5,6,7,8,9...N],然后让你定义一个箱子去装他们,箱子的大小为N-i
  • 第一次就是能装N数的框,然后跳出循环,将i+1,然后第二次就拿一个装N-1个的框,从第一个装只能装到第N-1个数,从第二个开始能装到第N个,但是从第三个开始装就不满足条件了,因为框没装满,所以就会跳出循环A.这样不断循环就会获取这个数字串在不同长度下的数字种类了。


希望能对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
hyz123456 发表于 2013-10-10 18:10
  • public static void getMax(String s1, String s2)
  •         {
  •                 String ls = s1.l ...

  • 谢谢,不过还是有点迷糊!!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-13 12:12:01
    7#
    学习学习!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-14 11:20:36
    8#
    学习学习!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-15 12:34:04
    9#
    学习学习!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-16 11:24:04
    10#
    学习学习!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-17 21:15:25
    11#
    学习学习!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-18 08:28:03
    12#
    学习学习!
    回复 使用道具 举报
    chensc 金牌黑马 2013-10-19 10:26:06
    13#
    学习学习!
    回复 使用道具 举报
    您需要登录后才可以回帖 登录 | 加入黑马