5455. Число различных подпоследовательностей
Hard
1 решил
Даны строки
Считать нужно не «получается / нет», а сколько разных способов вычеркнуть. Два способа различны, если отличаются наборы позиций оставшихся букв — даже когда сами буквы совпадают. Буквы
Если
Верните число способов.
s и t. Нужно получить t из s, вычёркивая любые буквы, но не переставляя оставшиеся.Считать нужно не «получается / нет», а сколько разных способов вычеркнуть. Два способа различны, если отличаются наборы позиций оставшихся букв — даже когда сами буквы совпадают. Буквы
t в s не обязаны стоять рядом: между ними можно вычеркнуть сколько угодно символов.Если
t пустая — ровно 1 способ: вычеркнуть всё (в том числе из пустой s). Если t непустая, а s пустая — 0.Верните число способов.
s = rabbbit позиция| 0| 1| 2| 3| 4| 5| 6| буква | r| a| b| b| b| i| t| t = rabbit нужны r, a, две b, i, t букв b в s три (позиции 2, 3, 4), в t нужны две. остальные буквы в s по одной — выбора нет. три способа выбрать две b из трёх: позиции 0,1,2,3,5,6 взяли b на 2 и 3 позиции 0,1,2,4,5,6 взяли b на 2 и 4 позиции 0,1,3,4,5,6 взяли b на 3 и 4 ответ 3Второй пример — все разные наборы позиций выписываются явно:
s = babgbag позиция| 0| 1| 2| 3| 4| 5| 6| буква | b| a| b| g| b| a| g| t = bag нужна тройка позиций i < j < k, где s[i]=b, s[j]=a, s[k]=g. буквы b на 0,2,4; a на 1,5; g на 3,6. индексы обязаны расти, поэтому «назад» к букве слева нельзя: (0, 1, 3) b a g (0, 1, 6) b a g (0, 5, 6) b a g (2, 5, 6) b a g после b на 2 буква a слева (позиция 1) уже недоступна (4, 5, 6) b a g последние три буквы подряд — тоже подходит ровно 5 троек, ответ 5
Примеры:
Вход:
{"s": "rabbbit", "t": "rabbit"}
Выход:
3
Объяснение: В s три буквы b (позиции 2, 3, 4), в t нужны две. Остальные буквы rabbit в s встречаются по разу. Три способа выбрать пару b: позиции (2,3), (2,4) и (3,4) → 3.
Вход:
{"s": "babgbag", "t": "bag"}
Выход:
5
Объяснение: Нужны позиции i < j < k с буквами b, a, g. Пять наборов: (0,1,3), (0,1,6), (0,5,6), (2,5,6), (4,5,6). Набор (2,1,3) нельзя: индекс 1 не больше 2, порядок в s ломать нельзя → 5.
Вход:
{"s": "", "t": ""}
Выход:
1
Объяснение: Пустую строку из пустой получают одним способом: ничего не выбирать. Так же 1, если t пустая, а s любая — вычеркнуть все буквы s.
Ограничения:
0 <= s.length <= 1000
0 <= t.length <= 1000
s и t состоят из строчных латинских букв
Решите эту задачу в браузере
Создайте бесплатный аккаунт — редактор Python, Java, JavaScript и Go, проверка на тестах за секунды.
Комментарии (0)
Зарегистрируйтесь или войдите, чтобы оставить комментарий
Пока нет комментариев. Будьте первым!