判断两个字符串相同的最大片段

   日期:2020-05-30     浏览:96    评论:0    
核心提示:举例:var str = qwe15as45,str1 = ewzc15asd查找两个字符串 相同的片段 很直观15as是相同片段;先说一下结题思路,有很多种,我只说我想的思路;就是将str1按它长度(最大到长度为1)的所有片段 去和str 对比(取包含的) 然后找出最长的所以重点就是如何找str1 的所有片段//将str1 字符串按长度 组合排列//由于例子的str1有点长 我就重新定义一个str1 = 1234//所以str1 长度为4的组合 1234 ,

举例:

var str = 'qwe15as45',str1 = 'ewzc15asd'

查找两个字符串 相同的片段 很直观'15as'是相同片段;

先说一下结题思路,有很多种,我只说我想的思路;

就是将str1按它长度(最大到长度为1)的所有片段 去和str 对比(取包含的) 然后找出最长的

所以重点就是如何找str1 的所有片段

//将str1 字符串按长度 组合排列
//由于例子的str1有点长 我就重新定义一个str1 = '1234'
//所以str1 长度为4的组合 1234 ,长度3:123,234两种 长度为2:12,23,34,三种 长度为1: 1,2,3,4四种

红线左边的是长度  右边是字符串的索引 为什么这么写 因为用到slice() 字符串截取

好首先把这个问题解决了  我们创建一个对象 数据格式是 key:字符串长度, 右边的用一个数组装起来

通过这个方法找到字符串 所有长度下的组合 也就是片段 我们现在只是获取了数组的索引 接下来就简单了 匹配就完事了
 

function getPublic(str,str1){
    var arr = [];//用来装所有包含的字符串
    len = str.length
    while(len!=0){
        for (var i = 0;i<str.length;i++){
            if(i+len-1 <str.length){
            var t=str.slice(i,i+len)
            if(str1.includes(t)){
                arr.push(t)
            }
        }
    }
    len --
    }
    return new Set(arr)//这里要去重
}

将 一开始我们举例的字符串带入

得到一个数组 如果希望的是最长的 那个

function getPublic(str,str1){
    var arr = []
    len = str.length
    while(len!=0){
        for (var i = 0;i<str.length;i++){
            if(i+len-1 <str.length){
            var t=str.slice(i,i+len)
            if(str1.includes(t)){
                arr.push(t)
            }
        }
    }
    len --
    }
    return [...new Set(arr)].reduce((p,c) => {return p.length>c.length ? p : c})
    
}

就拿到了最长的 公共片段 该方法一样可以解决两个数组  相同相邻的元素 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
更多>相关资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服