min = (max==s1)?s2:s1;//这句也不理解 三元运算符我知道
max这个字符串是S1吗,如果是那么返回s2给min,如果不是那么返回s1给min.就是min是除了max的那个.
for(int x=0;x<min.length();x++){
for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++){//这句for循环非常不理解
这句逻辑比较麻烦一点.
随着x递增,当x=0的时候,拿出来的时候整个min字符串跟max比,如果被包含了,就直接返回min,说明整个min都是重复的,那么最大也就这么多重复的了.
当x=1的时候,下面的循环是从0~min.length-1这个字符串是否被max包含,如果被包含就返回这个,说明这个是最大的了,因为上面已经判断不是全部被包含,如果前面length-1都被max包含,说明最后一个一定不被包含,返回前面length-1长度的min就可以了.如果没有包含,则z和y递增1,就是2~min.length再被判断.
如果min.length-1这么长没有被max包含,则开始进行min.length-2这么长开始判断,就这样一直到x=length-1最后一个循环的时候,z=1,y=0,一直到y=min.length-1而z=length,这样其实就是每个字符找一遍是不是被max包含,如果包含则返回这个字符.
其实整个的逻辑就是将这两个字符比较长短,将短的那个从最长慢慢减1长度去和2比,去找最长的被长的所包含的.
这个视频我没看过,不过这个逻辑很厉害,我之前也没见过.
|