返回

JavaScript巧妙解LeetCode最长公共前缀:一条循环玩转跳出方式

前端

巧用循环跳出技巧,巧解 LeetCode 最长公共前缀问题

前言

LeetCode 是程序员们磨炼算法技能的利器,其中最长公共前缀问题是一个经典的字符串难题。本文将为你提供一种巧妙且有趣的解决方案,使用 JavaScript 中强大的循环结构和灵活的跳出方式,一步步破解最长公共前缀的奥秘。

破解思路

循环与跳出方式

在 JavaScript 中,循环跳出并不仅限于常见的 break 语句,还可以运用多种方式灵活控制循环流:

  • break 语句: 立即终止循环,跳出循环体。
  • continue 语句: 跳过当前循环的剩余部分,继续执行下一轮迭代。
  • return 语句: 终止当前函数的执行,返回给定值。
  • throw 语句: 抛出异常,终止当前函数的执行。

实现代码

const longestCommonPrefix = (strs) => {
  // 输入判断
  if (!strs || strs.length === 0) {
    return "";
  }

  // 找出最短字符串
  let shortestStr = strs[0];
  for (let i = 1; i < strs.length; i++) {
    if (strs[i].length < shortestStr.length) {
      shortestStr = strs[i];
    }
  }

  // 逐字符循环查找公共前缀
  for (let i = 0; i < shortestStr.length; i++) {
    const char = shortestStr[i];

    // 检查所有字符串是否包含当前字符
    for (let j = 0; j < strs.length; j++) {
      if (strs[j][i] !== char) {
        return shortestStr.substring(0, i); // 跳出循环,返回公共前缀
      }
    }
  }

  // 若循环结束,则最短字符串为公共前缀
  return shortestStr;
};

代码解析

  1. 输入判断: 检查输入数组是否为空或长度为 0,如果是,则返回空字符串。

  2. 找出最短字符串: 找到字符串数组中最短的字符串,因为最长公共前缀不可能超过最短字符串的长度。

  3. 循环查找公共前缀: 使用循环遍历最短字符串的每个字符,并检查所有字符串是否都包含该字符。如果某个字符串不包含该字符,则跳出循环,并返回最短字符串的前缀。

  4. 返回结果: 如果循环结束,则说明所有字符串都包含最短字符串的前缀,因此返回最短字符串。

结语

通过巧用 JavaScript 循环的灵活性,我们以一种新颖有趣的方式解决了 LeetCode 最长公共前缀问题。希望这种思路能够启发你在解决算法问题时跳出思维定式,发挥想象力。

常见问题解答

1. 如果输入数组中包含空字符串怎么办?

如果输入数组中包含空字符串,则最长公共前缀为一个空字符串,因为空字符串是所有字符串的子字符串。

2. 如果输入数组中所有字符串都相等怎么办?

在这种情况下,最长公共前缀为所有字符串本身。

3. 循环是否可以在中间跳出?

是的,当我们发现某个字符串不包含当前字符时,可以通过 break 语句立即跳出循环。

4. 如何提高代码效率?

可以将最短字符串作为公共前缀,避免每次比较都从头开始。

5. 这种方法是否可以推广到其他编程语言?

是的,该方法可以推广到其他支持循环和跳出方式的编程语言中。