黑马程序员技术交流社区

标题: 获取最大相同字符串,帮忙解析下。。 [打印本页]

作者: 路漫漫_求索    时间: 2014-6-10 20:45
标题: 获取最大相同字符串,帮忙解析下。。
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 "";
        }
}

作者: Gaara33    时间: 2014-6-10 23:45
首先: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时,结束内循环。


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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2