Интересно, какова временная сложность для строкового метода includes
в JavaScript, который определяет, можно ли найти одну строку в другой строке.
например, str1 = 'abcd'
substr = 'bcd'
, console.log(str1.includes(substr))
выведет true
Я попытался реализовать свои собственные включения, чтобы лучше понять, как это работает под капотом. Вот моя попытка.
function includes(str, substr) {
let i = 0
let j = 0
let match = 0
while(i < str.length) {
if(str[i] === substr[j]) {
match++
i++
j++
if(match === substr.length) return true
} else if(str[i] === substr[0]) {
match = 0
j = 0
} else {
match = 0
j = 0
i++
}
}
return false
}
, поэтому console.log(includes('aaaabcd','aaaabc'))
выведет true
.
Мне кажется, что сложность времени здесь равна nm
, где n
- это длина str
и m
- длина substr
.
Также мне интересно, есть ли у кого-нибудь более элегантный алгоритм для его реализации. Может быть, используя подход с раздвижными окнами? Я не уверена.