Рубрики
Без рубрики

Девятьсот восемьдесят четыре : Строка без AAA или BBB -Кодовый носитель

Оператор, заданный двумя целыми числами a и b, возвращает любые строки, такие что: s имеет длину a + b… Помечено алгоритмами, интервью, java, литкодом.

Учитывая два целых числа a и b, верните любую строку s такую, что:

  • s имеет длину a+b и содержит ровно буквы “a” и ровно буквы “b”,

  • Подстрока ‘aaa’ не встречается в s, и

  • Подстрока “bbb” не встречается в s.

Пример 1:

Ввод:, Вывод: “abb” Объяснение: “abb”, “bab” и “bba” – все правильные ответы.

Пример 2:

Ввод:, Вывод: “алабама”

  • 0, b

  • Гарантируется, что такое s существует для данного a и b.

Как правило, может возникнуть 4 условия.

  • a <3 &&b <3

Для этого мы просто печатаем строку любым удобным для нас способом, так как мы не получим aaa или bbb в качестве подстроки.

  • a&&b <3

Для этого мы ставим b всякий раз, когда последние 2 символа aa так как там может быть подстрока aaa .

  • a <3 &&b

Для этого мы ставим a всякий раз, когда последние 2 символа bb так как там может быть подстрока bbb .

  • а&и б

Для этого, всякий раз, когда мы видим аа как последние 2 символа, начните печатать b и всякий раз, когда мы видим bb в качестве последних 2 символов начните печатать a .

Это основная идея, которую мы можем использовать для решения этой проблемы, и в Java есть метод EndsWith() , который очень удобен в этом случае. Мы можем использовать его жизнь заканчивается ("aa") или заканчивается ("bb") при проверке условий.

class Solution {
    public String strWithout3a3b(int a, int b) {
        StringBuilder sb = new StringBuilder();
        while (a > 0 || b > 0) {
            String s = sb.toString();
            // if we have aa as the last 2 characters, then the next one is b
            if (s.endsWith("aa")) {
                sb.append("b");
                b --;
            }
            // if we have bb as the last 2 characters, then the next one is a
            else if (s.endsWith("bb")) {
                sb.append("a");
                a --;
            }
            // if a > b, append a
            else if (a > b) {
                sb.append("a");
                a --;
            }
            // if b >= a, append b
            else {
                sb.append("b");
                b --;
            }
        }
        return sb.toString();
    }
}

Временная сложность: Это будет O(a + b), что соответствует длине строки

Сложность пространства: Это будет O(a + b), когда мы создадим новую строку длины a + b, и если мы рассмотрим это в анализе пространства.

Проблемы с Leetcode Решены

Ежедневные проблемы с Leetcode и другие проблемы с платформами решены

Оригинал: “https://dev.to/rohithv07/984-string-without-aaa-or-bbb-leetcode-medium-1e4n”