解题思路
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'
