1. 题目
用例1:输入:str1 = 'abcdef',str2 = 'abcdgh',输出:'abcd'
用例2:输入:str1 = 'aaabbbc', str2 = 'ababbbd',输出:‘bbb'
2. 思路
穷举法:给定两个字符串
A
和B
,我们可以通过从A
的第一个字符开始与B
对应的每一个字符进行对比的方式找到最长的公共字串。如果此时没有找到匹的字母,则移动到A
的第二个字符处,然后从B
的第一个字符处进行对比,以此类推。
3. 代码实现
const longestCommonStr = (s1, s2) => {
if (s1 == null || s2 == null) return ''
let start = 0
let longest = 0
for (let i = 0; i < s1.length; i++) {
for (let j = 0; j <s2.length; j++) {
if (s1[i] === s2[j]) {
let k = 1
while (s1[i + k] === s2[j + k] && s1[i + k] !== '' && s2[j + k] !== '') {
k++
}
if (k > longest) {
longest = k
start = i
}
}
}
}
return s1.substring(start, longest)
}
4. 复杂度分析
时间复杂度:O(n^2)
空间复杂度:O(1)