检查字符串是否包含所有子字符串的最快方法

时间:2016-03-23 22:45:17

标签: javascript arrays algorithm validation

给定的是一个包含子字符串和字符串的数组,如果它包含所有字符串,我将对其进行检查。

我是否必须迭代元素并使用indexOf> = 0进行检查,或者您是否有任何更酷的想法?因为我必须一遍又一遍地完成这项任务所有性能优势将有助于提前感谢编程语言是javascript

3 个答案:

答案 0 :(得分:2)

您可以使用Array.prototype.every(callback [,thisArg]);在此处详细了解:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

基本上,对于你的例子,它将是:

arr.every(function(element){
    return yourstring.indexOf(element) != -1;
});

当然,返回值为true或false。

答案 1 :(得分:1)

你正在寻找一个很酷的想法,并且真的有很多这些子串要测试吗?

然后,为您的字符串构建suffix tree将是一个好主意,其查找复杂性仅取决于子字符串大小。

你可以将天真解决方案的O(len(string) * len(substring) * N_substrings) 1 (如@BaneBojanić的一个)复杂化到O(len(string) + len(substring) * N_substrings)

1:假设len(string) * len(substring)的{​​{1}}复杂度,虽然

,但它可能优于that

答案 2 :(得分:0)

您需要一种搜索​​finite set of patterns in one text的算法。

最有名的实现是Aho–Corasick algorithm