Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有没有更有效的算法来寻找这类子串?_Javascript_Algorithm_Performance_Substring - Fatal编程技术网

Javascript 有没有更有效的算法来寻找这类子串?

Javascript 有没有更有效的算法来寻找这类子串?,javascript,algorithm,performance,substring,Javascript,Algorithm,Performance,Substring,我正在编写一个函数,它接受两个字符串作为输入参数:text和pattern 如果text以一个子字符串结束,该子字符串从indexindex开始,并且该子字符串是模式的开始,则返回index 如果没有这样的子字符串,则返回-1 我提出了以下函数,但我想知道是否有更有效的解决方案 所以问题是:有没有更有效的算法来找到这样的子串 函数findSubstring(文本、模式){ 设指数=-1; 对于(设i=1;i 20),我会在末尾检查部分匹配或之前检查完全匹配: const last =

我正在编写一个函数,它接受两个字符串作为输入参数:
text
pattern

  • 如果
    text
    以一个子字符串结束,该子字符串从index
    index
    开始,并且该子字符串是
    模式的开始,则返回
    index

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

我提出了以下函数,但我想知道是否有更有效的解决方案

所以问题是:有没有更有效的算法来找到这样的子串

函数findSubstring(文本、模式){
设指数=-1;

对于(设i=1;i 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);

虽然底层算法可能不太有效,但由于引擎优化,它可能运行得更快,无论它在您的情况下是否更快,都需要进行测试。

以下是根据您的需要重新编写的公认答案:@kaido谢谢!它似乎非常接近我想要的。我将检查是否可以改进进一步基于我的需要。请注意,@Jonas'的答案可能更快,但在某些情况下,其行为与您的代码不一样。@Kaido我想我将编写一个基准来比较解决方案以完全确定。这不会在重复输入时返回相同的结果,例如
fn(“abcabc”,“abcabc”)
,您的将返回
6
(第一个
“abc”
序列的最后一个索引),而OP的将返回
3
完整获取
“abcabc”