一、LeetCode 14. 最长公共前缀
题目介绍:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: strs = ["flower","flow","flight"] 输出: "fl"
二、解题分析
寻找字符串数组中的公共前缀,既然是公共前缀,说明是每一个字符串都要有的。所以我们可以考虑取出字符串数组的第一个元素firstStr
,以这个元素为标准,与其他数组元素进行同位置索引字符比对,查询是否一致;
如果第一个字符就与其他字符不一致,说明没有公共前缀,直接返回为空;
如果第一个字符一致,那么就继续向下再次比对,一致找到不同的字符或者是
firstStr
字符串遍历完毕,这就获取最长公共前缀。
Up Code ~ 上码 ~
/** * @method longestCommonPrefix1 * @param strs string[] * @returns string */ function longestCommonPrefix(strs: string[]): string { // 获取字符串数组的长度 const len = strs.length; // 临界值判定 if (len === 0) { return ''; } // 1. 因为去的是最长公共前缀, 所以取出字符串数组中的第一个元素 let [firstStr] = strs; // 2. 遍历当前字符串firstStr,然后依次比对数组strs中每一个元素对应位置是否是一直的 let i = 0; let s = ''; while (i < firstStr.length) { // 如果字符串数组中有一个字符串是不同于firstStr的对应索引位置字符,就说明,已经不是公共前缀了 const isNotCommon = strs.some((str) => str[i] !== firstStr[i]); // 如果不是公共前缀了,直接break if (isNotCommon) { break; } // 公共前缀,每次拼接字符 s += firstStr[i]; // 索引递增 i++; } // 返回结果 return s; }
功能测试:
// 最长公共前缀 fl const strs = ['flower', 'flow', 'flight']; console.log(longestCommonPrefix(strs)); // fl // 没有公共前缀 const strs2 = ["dog","racecar","car"] console.log(longestCommonPrefix(strs2)); // ''
提交代码,看下效果:
网络异常,图片无法展示
|
结语
重点在于思考什么是公共前缀,以及如何进行比对,你还有其他更好的方式吗?