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

© 灵感 高级黑马   /  2012-8-4 17:04  /  6118 人查看  /  28 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. <blockquote>/*
复制代码
代码运行没有问题,for循环那的内循环不是很懂,毕老师将的稍微快了点,求指点

28 个回复

正序浏览
杨志 发表于 2012-8-6 11:42
楼主不要刷楼!否则后果自负!

不好意思,真不是故意的,以后不会了
回复 使用道具 举报

回帖奖励 +2 黑马币

楼主不要刷楼!否则后果自负!
回复 使用道具 举报
{:soso_e179:}
回复 使用道具 举报

回帖奖励 +2 黑马币

本帖最后由 胡文凡 于 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是短串

评分

参与人数 1技术分 +1 收起 理由
包晗 + 1

查看全部评分

回复 使用道具 举报

回帖奖励 +2 黑马币

19楼讲解已经很详细了,我是看了四五遍才明白过来。
回复 使用道具 举报
谭培龙 发表于 2012-8-4 17:54
下面这图是我的思路图画的比较烂。 这题是要小串自减去和大串比较看是否属于大串
...

不是两端同时自减的,你也理解错了,而且长字符串它是不自减的吧
回复 使用道具 举报
谭培龙 发表于 2012-8-4 17:54
下面这图是我的思路图画的比较烂。 这题是要小串自减去和大串比较看是否属于大串
...

给力!!!本来没看下面在自己写,后来翻到中间看到哥们如此给力的解答,我直接CTRL+A+delete 把写的删掉了,图文并茂,太给力了!领教!:handshake
回复 使用道具 举报

回帖奖励 +2 黑马币

路过看一下,顺便学习一下
回复 使用道具 举报

回帖奖励 +2 黑马币

学习一下
回复 使用道具 举报

回帖奖励 +2 黑马币

先回复着
回复 使用道具 举报

回帖奖励 +2 黑马币

  1. /*
  2. 需求:获取两个字符串中最大相同子串
  3. */

  4. class StringTest3
  5. {
  6.         static String getMaxSubString(String s1 ,String s2)//传入两个字符串s1  s2
  7.         {
  8.                 for(int x=0;x<s2.length();x++)//外循环,控制长度,内循环每运行一次,temp的长度-1。
  9.                 {
  10.                         for(int y=0,z=s2.length()-x; z!=s2.length()+1; y++,z++)//这段代码默认s2是短串,s1是长串,y是头z是尾。
  11.                         {
  12.                                 String temp = s2.substring(y,z);
  13.                                 //sop(temp);
  14.                                 if(s1.contains(temp))//如果接收到相同元素则返回true就return
  15.                                         return temp;
  16.                         }
  17.                 }
  18.                 return "";
  19.         }

  20.         public static void sop(String str)
  21.         {
  22.                         System.out.println(str);
  23.         }

  24.         public static void main(String[] args)
  25.         {
  26.                 String s1 = "saased helloaasdf";
  27.                 String s2 = "asdhellosd";
  28.                 sop(getMaxSubString(s1,s2));
  29.         }
  30. }
复制代码
下面这图是我的思路图画的比较烂。 这题是要小串自减去和大串比较看是否属于大串

123.JPG (25.28 KB, 下载次数: 57)

123.JPG

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
赵俊杰 发表于 2012-8-4 17:11
楼主,刷屏不好吧,

没,我不是故意的,郁闷当中
回复 使用道具 举报

回帖奖励 +2 黑马币

楼主,刷屏不好吧,{:soso_e107:}
回复 使用道具 举报
{:soso__6235880048239246314_3:}
回复 使用道具 举报
{:soso__6235880048239246314_3:}
回复 使用道具 举报
{:soso__6235880048239246314_3:}
回复 使用道具 举报
{:soso__6235880048239246314_3:}
回复 使用道具 举报
{:soso__6235880048239246314_3:}
回复 使用道具 举报
{:soso__6235880048239246314_3:}
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马