LeetCode 14. 最长公共前缀 | 算法-从菜鸟开始

简介: 算法,从承认自己是一个菜鸟开始!话不多说,让我们继续我们的算法之旅。

一、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)); // ''


提交代码,看下效果:


网络异常,图片无法展示
|


结语


重点在于思考什么是公共前缀,以及如何进行比对,你还有其他更好的方式吗?



相关文章
|
2月前
|
算法
Leetcode第十四题(最长公共前缀)
这篇文章介绍了一种算法,用于在给定的字符串数组中找到最长公共前缀,通过逐字符比较每个字符串的对应位置,一旦发现不匹配立即返回当前已匹配的子串作为公共前缀。
25 0
|
2月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
40 0
|
21天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
2月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
28 2
|
4月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
70 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
4月前
|
算法
LeetCode第14题最长公共前缀
该文章介绍了 LeetCode 第 14 题最长公共前缀的解法,通过取一个字符串作为基准,一列一列字符比较来找出最长公共前缀,时间复杂度为 O(m * n),同时提到也可使用二分查找法,但代码复杂度会上升。
LeetCode第14题最长公共前缀
|
4月前
|
算法 Java
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
52 6
|
4月前
|
存储 算法 Java
LeetCode经典算法题:打家劫舍java详解
LeetCode经典算法题:打家劫舍java详解
70 2
|
4月前
|
人工智能 算法 Java
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
52 1
|
4月前
|
存储 算法 Java
LeetCode经典算法题:预测赢家+香槟塔java解法
LeetCode经典算法题:预测赢家+香槟塔java解法
61 1