главная новое лучшее написать

strings


3

Ссылка на задачу — 1415. The k-th Lexicographical String of All Happy Strings of Length n.

📝 Описание задачи

"Счастливая строка" – это строка длины n, состоящая только из символов ['a', 'b', 'c'], в которой нет двух одинаковых подряд идущих символов.
Нужно найти k-ю счастливую строку в лексикографическом порядке, либо вернуть "", если таких строк меньше k.

💡 Идея

Рассмотрим связь счастливых строк с двоичными строками.
Каждая счастливая строка:

Таким образом, двоичное представление k-1 почти полностью определяет структуру требуемой строки (без первого символа).
Мы можем использовать биты 0 и 1 из этого двоичного представления, чтобы выбирать между двумя допустимыми символами при итеративной генерации каждого следующего символа конкретной счастливой строки. 🚀

🔍 Детали подхода

  1. Определяем количество возможных строк с фиксированным первым символом:

Читать дальше →

ответить
3

Ссылка на задачу – 1910. Remove All Occurrences of a Substring.

📌 Описание задачи

Даны две строки s и part. Нужно избавиться от всех вхождений part из s, выполняя следующую операцию:

🐢 Анализ наивного решения

Достаточно несложно быстро набросать следующее решение:

impl Solution {
    pub fn remove_occurrences(mut s: String, part: String) -> String {
        let P = part.len();
        while let Some(idx) = s.find(&part) {
            s.replace_range(idx..idx+P, "");
        }
        s
    }
}

Читать дальше →

1 ответ
3

Ссылка на задачу – 3174. Clear Digits.

📌 Описание задачи

Дана строка s, содержащая буквы и цифры. Из неё возможно удалять цифры только путем выполнения следующей операции:

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

💡 Идея

Достаточно легко придумать алгоритм, формирующий ответ справа-налево (просто запоминаем, сколько символов нужно скипнуть после встреченных цифр).

Мы же реализуем решение с прямым (слева-направо) обходом строки без необходимости переворачивания результата.

⚙ Подробности подхода

  1. Инициализируем буфер размером s.len() (заполняем заглушками '\0').

Читать дальше →

ответить
3

Ссылка на задачу – 1790. Check if One String Swap Can Make Strings Equal.

Описание задачи 😊

Даны две строки s1 и s2 равной длины. Необходимо определить, можно ли сделать строки равными, совершив не более одного обмена символов в одной из строк.
Обмен — это операция, когда выбираются два индекса в строке и символы на этих позициях меняются местами.

Идея 😊

Основная идея заключается в поиске позиций, на которых символы в строках различаются.

Детали подхода 🚀

  1. Сбор различающихся индексов:
    • Пройдемся по всем индексам строк и соберем в вектор те индексы, на которых символы в s1 и s2 различаются.
      При этом достаточно собрать максимум 3 индекса.
  2. Проверка случаев:
    • Нет различий: Если вектор пуст, строки равны.

Читать дальше →

ответить