Проверка наличия подпоследовательности в строке

Двигайте указатель по pattern только при совпадении с текущим символом text. Если удалось пройти весь pattern, это подпоследовательность.

Короткий ответ

Что ответить на собеседовании

Двигайте указатель по pattern только при совпадении с текущим символом text. Если удалось пройти весь pattern, это подпоследовательность.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию, которая определяет, встречаются ли символы одной строки в другой в том же порядке, но не обязаны быть смежными.

function isSubsequence(pattern, text) {
  return false;
}

// Примеры использования:
isSubsequence('whe', 'cartwheel')   // true
isSubsequence('crt', 'cartwheel')   // true
isSubsequence('ctr', 'cartwheel')   // false
isSubsequence('weee', 'cartwheel')  // false

Ответ

Двигайте указатель по pattern только при совпадении с текущим символом text. Если удалось пройти весь pattern, это подпоследовательность.

function isSubsequence(pattern, text) {
  const expected = [...pattern];
  let index = 0;
  for (const char of text) {
    if (index < expected.length && char === expected[index]) index++;
  }
  return index === expected.length;
}

Пустой pattern всегда подходит. Символы могут иметь промежутки, но их относительный порядок менять нельзя: ctr не встречается в cartwheel как подпоследовательность. Работа ведётся по Unicode-кодовым точкам с учётом регистра. Время O(|pattern| + |text|), память O(|pattern|).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее