解题思路
str1 和 str2 有 1 个是空字符串,最长公共子串是 ‘’
2. 两层 for 循环
3. 第 1 层 for 循环是个指针,代表从 str1 第几个字符开始查找公共子串
4. 第 2 层 for 循环代表查找的子串结尾索引
5. 判断 str1 子串是否是 str2 的子串,如果是计算最大长度,记录公共子串图解
指针 i 移动
- 子串结尾索引 j 增加
- 判断公共子串
代码
/**
* 解题思路:
* 1. str1 和 str2 有 1 个是空字符串,最长公共子串是 ''
* 2. 两层 for 循环
* 3. 第 1 层 for 循环是个指针,代表从 str1 第几个字符开始查找公共子串
* 4. 第 2 层 for 循环代表查找的子串结尾索引
* 5. 判断 str1 子串是否是 str2 的子串,如果是计算最大长度,记录公共子串
*/
function longestCommonStr(str1, str2) {
// 最长公共子串
let maxStr = '';
// 最长公共子串长度
let maxLength = 0;
// 代表从 str1 第几个字符开始查找公共子串
for (let i = 0; i < str1.length; i++) {
// 代表查找的子串结尾索引
for (let j = i; j < str1.length; j++) {
// 截取当前子串,substring 截取时不包含第二个参数的索引
const current = str1.substring(i, j + 1);
// str2 包含该子串,则为公共子串,计算长度,记录公共子串
if (str2.indexOf(current) > -1) {
if (current.length > maxLength) {
maxLength = current.length;
maxStr = current;
}
}
}
}
return maxStr;
}
const str1 = 'abcdefghki';
const str2 = 'afgh000';
console.log(longestCommonStr(str1, str2)); // 'fgh'