javascript - 有没有更有效的算法来找到这种子串?

标签 javascript algorithm performance substring

<分区>

我正在编写一个将两个字符串作为输入参数的函数:textpattern

  • 如果 text 以从索引 index 开始的子字符串结束,并且该子字符串是 pattern 的开始,则返回 索引

  • 如果没有这样的子串,返回-1

我想出了以下功能,但我想知道是否有更有效的解决方案。

那么问题来了:有没有更高效的算法来找到这样的子串?

function findSubstring(text, pattern) {
  let index = -1;

  for (let i = 1; i <= text.length; i++) {
    const tail = text.substr(-i);

    if (pattern.indexOf(tail) === 0) {
      index = text.length - i;
    }
  }

  return index;
}

const exampleText = 'const result = items.m';
const examplePattern = '.map((item) => {})';

console.log(findSubstring(exampleText, examplePattern)); // -> 20

最佳答案

我会在最后检查部分匹配或在此之前检查完整匹配:

  const last = text.lastIndexOf(pattern[0]);
  if(text.substr(last, last + pattern.length) === pattern.substr(0, text.length - last))
    return last;
  return text.lastIndexOf(pattern, last);

虽然底层算法的效率可能较低,但由于引擎优化,它可能仍会运行得更快,如果您的情况需要测试它是否更快。

关于javascript - 有没有更有效的算法来找到这种子串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680213/

相关文章:

javascript - Google Chrome 对我的 JS 代码没有响应?

C++11 STL 容器,支持只移动类型并且对开始和结束具有 O(1) 写访问权限

javascript - 为什么 typescript 类中的这种结构在编译正常时会导致运行时错误?

c# - 从广度优先搜索转换为深度优先有限搜索

algorithm - 如何计算多个重叠的平行六面体的总体积?

algorithm - 检查数组的排序

javascript - 在 IE 中动态设置滚动到 iframe

javascript - 在 javascript 中查找某个原型(prototype)有多少个实例

javascript - 在 Outlook 中,如何将 View 从任务 Pane 加载项切换到模块扩展?

javascript - 在启用开发人员工具之前,IE11 中的 javascript 执行缓慢