Реализуйте JavaScript string.prototype.includes и проанализируйте временную сложность этого - PullRequest
1 голос
/ 25 марта 2020

Интересно, какова временная сложность для строкового метода 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.

Также мне интересно, есть ли у кого-нибудь более элегантный алгоритм для его реализации. Может быть, используя подход с раздвижными окнами? Я не уверена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...