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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class 获取最大相同字符 {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String s1 = "abcderefdad";
                String s2 = "afdaderefadda";
               
        }
        public static String getMaxString(String s1, String s2){
                String min="", max="";
                max = s1.length()>s2.length()?s1:s2;
                min = max == s1?s2:s1;
                for(int x=0; x<min.length();x++){

                        //下面这个循环体,有些不太明白?帮忙解析下。。。y 和 z 的运行步骤
                        for(int y=0, z=min.length()-x; z!=min.length()+1; y++,z++){
                                String temp = min.substring(y,z);
                                if(max.contains(temp)){
                                        return temp;
                                }
                        }
                }
                return "";
        }
}

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

1 个回复

倒序浏览
首先:min是那个比较短的字符串,
在y和z的这个循环中
举例:当x=0时,也就是第一次循环
此时y=0,z=min.length();
temp其实就是等于min这个字符串,y++没问题,z++后等于min.leng()+1,内循环就结束了
接着外循环,x=1时,内循环(如果一直不满足匹配条件的话)循环2次,z的值就不符合循环条件,
内循环就要结束了,这两次内循环中(y=0;z=min.length()-1);(y=1,z=min.length()).
举个简单的例子,加入短的字符串为min="12345",
首先min当中包含的最大字符串就是"12345",此时就是外循环x=0时,
不符合条件,接着向下判断,最长的字符串就是"1234"和"2345",c此时就是外循环x=1时,
如果还不符合条件,需要判断的字符串就是"123";“234”;“345”这三个,以此类推:

其实内循环中的初始值:y就是每次都从0角标开始,z就是每一轮内循环中字符串的长度,如上面的例子,
分别是5,4,3...,内循环中当z的值自增到字符串的边界也就是min.length()+1时,结束内循环。


不知道我说的够不够详细,其实作图解释的话更清楚,希望能对你有所帮助。

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马