Задачи
January 20, 2023

Разбор. Make string great again

Дана строка из строчных и прописных букв английского алфавита.

"Великолепная" строка - это строка, в которой нет 2-х соседних символов, где s[i] - строчная буква, а s[i + 1] - та же буква, но в верхнем регистре или наоборот. Пустая строка является "великолепной".

Действие: чтобы сделать строку "великолепной", вы можете взять любые 2 соседних символа, которые делают ее плохой и удалить их. Это действие можно выполнять бесконечное количество раз.

Верните строку после того, как сделаете ее снова "великолепной".

Примеры:

  1. str = "unileEecs";
    Output: "unilecs"
  2. str = "abBAcC";
    Output: ""
  3. str = "a";
    Output: "a"

Разбор

  1. Так как мы будем изменять строку, удалять из нее символы, то создадим новую строку с помощью класса StringBuilder. Этот класс заточен на работу с изменяемыми строками.
  2. Если мы встретим соседей, которые являются одной и той же буквой, но в разных регистрах, то удалим их и запустим наш цикл с начала.

    2.1. Как можно легко определить, что два символа это одна буква в разных регистрах. В кодировке ASCII значение прописной буквы 'а' начинается с кода 97, а строчной 'A' - с кода 65. То есть разность этих кодов равна 32. То же самое верно для остальных букв, т.к. они идут подряд.
  3. После прохождения цикла возвращаем полученную строку.

Реализация

Play-test

https://dotnetfiddle.net/AZ3cwH

Варианты от наших подписчиков

Подход похожий, но проход по циклу делается один раз и используется стек для хранения результирующей строки.

https://www.onlinegdb.com/iDs2eQoIH