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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 马晓平 于 2013-10-25 18:47 编辑

毕老师视频里的练习四里面的循环没看懂请教大神帮我分析解释一下尤其是

String max="",min="";
                max=(s1.length()>s2.length())?s1:s2;
                min=(max==s1)?s2:s1;
                //sop("max="+max+"....min="+min);
                for(int x=0;x<min.length();x++)
                {
                        for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
                        {
                                String temp=min.substring(y,z);
                                //sop(temp);
                                if(max.contains(temp))
                                        //if(s1,indexof(temp)!=-1)
                                        return temp;

其中这里面的for循环有点蒙了没看懂大神帮我分析一下吧,for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)这个循环中z代表的min.length怎么解释呢

无标题.png (61.17 KB, 下载次数: 1)

练习4里面的循环没看懂

练习4里面的循环没看懂

无标题.png (61.17 KB, 下载次数: 4)

疑问

疑问

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1 神马都是浮云

查看全部评分

13 个回复

倒序浏览
把需求也描述一下吧,然后把代码补全了,至少让我们能运行起来看下效果呀,不然真有点看不明白。。。
回复 使用道具 举报
这不是求最小相同子串么。
举个例:
max:abcwerthhelloyuiodef ,size =20
min:cvhellonm, size=9
x=0,y=0,z=9-x=9 ,sub(y,z)=sub(0,9)=cvhellonm,y++,z++=10=min.size+1,结束。
x=1,y=0,z=9-1=8,sub(0,8)=cvhellon,y++,z++
        y=1,z=8++=9,sub(1,9)=vhellonm
x=2,…………
........
就一直这样循环呗!因为每次循环x+1,z=min.length-x,z=min.length-x就表示每次循环截取的子串长度减1.

希望对你有帮助!{:soso_e141:}

评分

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

查看全部评分

回复 使用道具 举报
      方法是为了检索出两个字符串中包含的最大相同字符串,循环是为了获得较短子串中的子串(从子串中的长度,到子串的长度为1),循环里的min.subString()可以获得相应的子串,z是这里的参数,表明截取子串的结束角标-1,所以内部的for循环有z!=min.length()+1;这是反推的方式,如果不懂的话你可以自己带入循环中思考,或者注释掉内循环的打印,观察下就能知道了。

评分

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

查看全部评分

回复 使用道具 举报
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)这个循环中z代表的min.length怎么解释呢

解答:这句话中,y代表的是substring(start,length)中的start,z代表的是substring(start,length)中的length。用y和z这两个变量动态控制下面substring(start,length)中的这两个参数。

建议你在重新看一下视频,毕老师讲解的挺清楚的,你多看看两遍,相信你就明白了!!

评分

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

查看全部评分

回复 使用道具 举报
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++),
这个z代表的是substring(y,z)中的length,取字符串时是包含头不包含尾,所以如果中了,最后一位的角标肯定是z-1,所以为了取全,那么这个substring中结尾i的角标是z.

评分

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

查看全部评分

回复 使用道具 举报
就是在判定 s1和s2这两个参数,  其实说也说不清楚。哪两个判定出的结果(max,min)在下面的代码运行你就 能看懂了。所有你可以假设给s1
s2赋值,去在代码中实验,  你就懂了啊 呵呵!

评分

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

查看全部评分

回复 使用道具 举报
乔兵 高级黑马 2013-10-25 08:01:13
8#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
匡文 发表于 2013-10-24 15:15
把需求也描述一下吧,然后把代码补全了,至少让我们能运行起来看下效果呀,不然真有点看不明白。。。 ...


class StringTest2
{      
//练习四
        public static String getMaxSubString(String s1,String s2)
        {
               
                String max="",min="";
                max=(s1.length()>s2.length())?s1:s2;
                min=(max==s1)?s2:s1;
                //sop("max="+max+"....min="+min);
                for(int x=0;x<min.length();x++)
                {
                        for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
                        {
                                String temp=min.substring(y,z);
                                //sop(temp);
                                if(max.contains(temp))
                                        //if(s1,indexof(temp)!=-1)
                                        return temp;
                        }
                }
                return "";
        }

        public static void main(String[] args)
        {
                String s1="abcwerthelloyuiodef";
                String s2="cvhellobnm";
                sop(getMaxSubString(s1,s2));

        }
        public static void sop(String str)
        {
                System.out.println(str);
        }
}
回复 使用道具 举报
王松松 发表于 2013-10-24 15:21
这不是求最小相同子串么。
举个例:
max:abcwerthhelloyuiodef ,size =20

不对,这是求最大字串的,里面的循环我没看懂,就是这一段
for(int x=0;x<min.length();x++)
                {
                        for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
                        {
                                String temp=min.substring(y,z);
                                //sop(temp);
                                if(max.contains(temp))
                                        //if(s1,indexof(temp)!=-1)
                                        return temp;
回复 使用道具 举报
乔兵 发表于 2013-10-25 08:01
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看 ...

知道了,之前没网所以没看,今天才看到,是提问完了就关闭吗?还是这个问题解决了再关闭呢?我是新人
回复 使用道具 举报
乔兵 高级黑马 2013-10-25 18:57:31
12#
马晓平 发表于 2013-10-25 18:56
知道了,之前没网所以没看,今天才看到,是提问完了就关闭吗?还是这个问题解决了再关闭呢?我是新人 ...

解决后再修改
回复 使用道具 举报
卑微の小幸福 发表于 2013-10-25 01:14
就是在判定 s1和s2这两个参数,  其实说也说不清楚。哪两个判定出的结果(max,min)在下面的代码运行你就  ...

主要是里面的for循环没理解
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
回复 使用道具 举报

好的,记住了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马