判斷兩個字符串相同的最大片段

舉例:

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

就拿到了最長的 公共片段 該方法一樣可以解決兩個數組  相同相鄰的元素 

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