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
- 如果
以一个子字符串结束,该子字符串从indextext
开始,并且该子字符串是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”
。