day13-09-String(字符串练习4)获取两个字符串中最大相同子串

4.获取两个字符串中最大相同子串
第一个动作,将短的那个串进行长度依次递减的子串打印。*
"abcwerthelloyuiodef"
"cvhellobnm"
思路:将短的那个子串按长度递减的方式获取到。
2.将每获取到的子串去长串中判断是否包含到

大圈套小圈 ,for嵌套循环

class StringTest3
{
    public static void main(String args[])
    {
        String str1 = "abcwerthelloyuiodef";
        String str2 = "cvhellobnm";
        sop("count="+getMaxSubString(str1,str2));
    }
    
    public stataic String getMaxSubString(String s1,String s2)
    {
        String max = "",min = "";
        max = (s1.length()>s2.length())?s1:s2;//查找长的字符串
        min = (max ==s1)?s2:s1;//查找短的字符串
        /*
        大圈套小圈,外循环控制行,内层循环控制着执行的列
        String str1 = "abcwerthelloyuiodef";
        String str2 = "cvhellobnm"
        拿str2判断是否包含在str1
        str2长度0~length()-0      1个字符串判断是否包含在str1  *
            长度0-length()-1      2个字符串判断是否包含在str1  **
            长度0~length()-2      3个字符串判断是否包含在str1  ***
            长度0-length()-3      4个字符串判断是否包含在str1  ****
        */
        for(int x=0;x<min.length();x++)
        {
/*第一个循环是定义一共有多少轮,但不一定执行完全部的轮数才能找到,如果找到下面的return 会返回找到的子串*/
            for(int y = 0,z=min.length()-x;z!=min.length()+1;y++,z++)
            {
/*第二个循环中的y 是获取str2中的子串都是从0开始的,而z 是用来计算在str2中获取子串的长度,第一轮是7,就是str2的长度减去0(我们可以想象成 str的长度 - 轮数1 - 1 = 7(就是从0到7获取str2的子串),如果是第二轮就是str的长度 - 轮数2 - 1 = 6)(就是从0到6获取str2的子串),而判断条件n < min.length() + 1 是用来获取有多少个子串,比如上面的6,获取了(0到6之后,还有一个是1到7的子串,在执行完一次循坏之后j和n会自加1,在第二次循环的时候j和n就会变成1和7,就能获取长度为6的第二个子串.长度为5,4也是依次计算)*/
                String temp = min.substring(y,z);
                //sop(temp);
                if(max.contains(temp))
                {
                    return temp;
                }
            }
        }
        return "";
    }
    public static void sop(String str)
    {
        System.out.println(str);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。