1. 获取两个字符串中最大相同子串

获取两个字符串中最大相同子串

分析

比如有两个字符串
str1 = “eysdfghjkl”;
str2 = “cxbghjp”;
需要找出这里两个字符串中最大的字符子串,这里就是**“ghj”**.

查找的方法就是把两个字符串中较短的那个依次减小,然后按照该长度在短的字符串中获取所有子串依次判断该子串是否存在于长的字符串中.

上面的方法听着是不是很绕.我们详细说明一下吧.

  1. 上面的那两个字符串短的是str2,长度为7,即str2.leng() == 7.这个没有异议吧.
    然后依次减小,先从7开始,str2长度为7的子串只有一个吧,就是str2本身.那判断str2是否是str1的子串.很明显不是.那我们就把上面黑体字部分的定义为第一轮
  2. 那我们开始第二轮,str2的长度依次减小,上一轮的长度为7,那这一轮就是6,那我们就找长度为6的str2的子串,只有两个:
    (1) “cxbghj”
    (2) “xbghjp”
    然后判断上面这两个字符串的是否是str1的子串,也不是.
  3. 继续开始第三轮,第三轮的长度为5,str2长度的子串有3个:
    (1) “cxbgh”
    (2) “xbghj”
    (3) “bghjp”
    判断这三个字符串是否是str1的子串.不是.
  4. 第四轮,长度为4,四个str2的子串
    (1) “cxbg”
    (2) “xbgh”
    (3) “bghj”
    (4) “ghjp”
    也没有是str1的子串.
  5. 第5轮长度为3,5个str的子串.
    (1) “cxb”
    (2) “xbg”
    (3) “bgh”
    (4) “ghj”
    (5) “hjp”

在这一轮对比到(4)的时候判断(4)是str1的子串.就马上退出,就找到了这两个字符串的子串

实现代码如下:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值