2016-03-23 3 views
1

Дано массив с подстроками и строкой, которую я проверяю, если она содержит все их.Самый быстрый способ проверить, содержит ли строка все подстроки

Нужно ли перебирать элементы и проверять с помощью indexOf> = 0 или у вас есть более крутые идеи? Поскольку я должен выполнять эту задачу снова и снова, любые преимущества производительности помогут заблаговременно использовать язык программирования javascript

+0

все подстроки одинакового размера случайно? – Andrew

+0

Это отличается, но что вы думаете? Любопытно – Skeec

+1

это зависит от подстроки. вы можете создать регулярное выражение и проверить его. –

ответ

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

Возвращаемое значение является истинным или ложным, конечно.

+0

О, ох, это хорошая функция прототипа, спасибо :-) – Skeec

+0

О, и потому, что вы действительно хотите, чтобы все они содержались внутри вашей строки, вы бы скорее протестировали ее с помощью! = -1 (поскольку indexOf возвращает -1, когда он не найден). Я отредактирую это прямо сейчас. –

+0

Это лучше, чем проверка> = 0? – Skeec

1

Вы ищете отличную идею и действительно имеете много таких подстрок для тестирования?

Будет хорошей идеей для построения suffix tree для вашей строки, которая имеет сложность поиска только в зависимости от размера подстроки.

Вы получите вниз сложность от O(len(string) * len(substring) * N_substrings) наивного решения (как @ BaneBojanić один), чтобы O(len(string) + len(substring) * N_substrings).

1: Предполагая len(string) * len(substring) сложность для indexOf, это могло бы быть лучше, чем that хотя

+0

Не то, чтобы многие, но его повторяющаяся задача, могли бы вы объяснить, что для меня больше? :-) – Skeec

+0

@Skeec: Вы уже проверили ссылку на Википедию? Я не собираюсь повторять все оттуда :-) – Bergi

+0

Ну, я думаю, я получил его – Skeec

Смежные вопросы