获取两个字符串中最大相同子串
分析
比如有两个字符串
str1 = “eysdfghjkl”;
str2 = “cxbghjp”;
需要找出这里两个字符串中最大的字符子串,这里就是**“ghj”**.
查找的方法就是把两个字符串中较短的那个依次减小,然后按照该长度在短的字符串中获取所有子串依次判断该子串是否存在于长的字符串中.
上面的方法听着是不是很绕.我们详细说明一下吧.
- 上面的那两个字符串短的是str2,长度为7,即str2.leng() == 7.这个没有异议吧.
然后依次减小,先从7开始,str2长度为7的子串只有一个吧,就是str2本身.那判断str2是否是str1的子串.很明显不是.那我们就把上面黑体字部分的定义为第一轮 - 那我们开始第二轮,str2的长度依次减小,上一轮的长度为7,那这一轮就是6,那我们就找长度为6的str2的子串,只有两个:
(1) “cxbghj”
(2) “xbghjp”
然后判断上面这两个字符串的是否是str1的子串,也不是. - 继续开始第三轮,第三轮的长度为5,str2长度的子串有3个:
(1) “cxbgh”
(2) “xbghj”
(3) “bghjp”
判断这三个字符串是否是str1的子串.不是. - 第四轮,长度为4,四个str2的子串
(1) “cxbg”
(2) “xbgh”
(3) “bghj”
(4) “ghjp”
也没有是str1的子串. - 第5轮长度为3,5个str的子串.
(1) “cxb”
(2) “xbg”
(3) “bgh”
(4) “ghj”
(5) “hjp”
在这一轮对比到(4)的时候判断(4)是str1的子串.就马上退出,就找到了这两个字符串的子串
实现代码如下: