返回

使用JavaScript征服LeetCode:破解“数组中的字符串匹配”难题

前端

前端算法的魅力在于,它能以一种实用的方式提升你的编程技能。LeetCode作为算法练习平台,提供了丰富的题库,能让你循序渐进地进阶。今天,我们就来挑战LeetCode中的“数组中的字符串匹配”问题,用JavaScript的强大功能来破解它。

算法简介

“数组中的字符串匹配”问题要求你在一个字符串数组中,找到与给定字符串匹配的所有字符串。需要注意的是,匹配并不意味着完全相等,而是指给定字符串是目标字符串的子串。

JavaScript解题步骤

1. 巧用indexOf()方法

JavaScript的indexOf()方法可以用来查找一个字符串在另一个字符串中出现的索引位置。我们只需遍历字符串数组,使用indexOf()方法检查每个字符串是否包含给定字符串即可。代码如下:

function stringMatching(arr, target) {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].indexOf(target) !== -1) {
      result.push(arr[i]);
    }
  }
  return result;
}

2. 性能优化:双指针法

当字符串数组规模较大时,直接遍历会降低效率。双指针法是一种更优的方法,它使用两个指针来跟踪当前正在检查的位置:

function stringMatchingOptimized(arr, target) {
  const result = [];
  for (let i = 0, j = 0; i < arr.length && j < target.length;) {
    if (arr[i][j] === target[j]) {
      j++;
    } else {
      i++;
      j = 0;
    }
    if (j === target.length) {
      result.push(arr[i]);
      i++;
      j = 0;
    }
  }
  return result;
}

示例代码

const arr = ["abc", "def", "ghi", "abcde"];
const target = "bc";

const result = stringMatching(arr, target);
console.log(result); // ["abc", "abcde"]

总结

掌握“数组中的字符串匹配”算法,不仅能提升你的LeetCode解题能力,还能让你更好地理解字符串处理和匹配的技巧。通过本文的讲解,你已经学会了使用JavaScript的indexOf()方法和双指针法来解决此问题。继续练习,你一定能征服更多算法难题!