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

举例:

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})
    
}

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章