舉例:
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})
}
就拿到了最長的 公共片段 該方法一樣可以解決兩個數組 相同相鄰的元素