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

时间:2019-04-14 21:31:52

标签: javascript algorithm performance substring

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

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

    < / li>
  • 如果没有这样的子字符串,请返回-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

1 个答案:

答案 0 :(得分:1)

我会在结尾处检查部分比赛,还是在此之前检查全部比赛:

  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);

尽管底层算法的效率可能较低,但由于引擎优化,该算法仍可能运行得更快,但在需要测试的情况下它还是更快。