Компрессия строки

Пройдите строку сериями: запишите символ и длину серии, если она больше одного. Одиночные символы оставьте без счётчика, сохраняя регистр.

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

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

Пройдите строку сериями: запишите символ и длину серии, если она больше одного. Одиночные символы оставьте без счётчика, сохраняя регистр.

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

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

Условие

Дана строка, в которой могут встречаться одинаковые символы, идущие подряд. Если символ повторяется несколько раз подряд, необходимо оставить одну его копию и указать количество повторений. Если символ встречается единожды, он остаётся без изменений. Пример: AAABBBCCXYZDDDD → A3B3C2XYZD4

public String compress(String s) {
    // ...
}

Ответ

Пройдите строку сериями: запишите символ и длину серии, если она больше одного. Одиночные символы оставьте без счётчика, сохраняя регистр.

public String compress(String s) {
    java.util.Objects.requireNonNull(s);
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < s.length();) {
        char current = s.charAt(i);
        int start = i++;
        while (i < s.length() && s.charAt(i) == current) i++;
        result.append(current);
        if (i - start > 1) result.append(i - start);
    }
    return result.toString();
}

Для AAABBBCCXYZDDDD получится A3B3C2XYZD4. Время O(n), память O(n) на результат. Пустая строка поддерживается; единица сравнения — char. При наличии цифр во входе такой формат не всегда обратим без дополнительных правил экранирования.

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

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

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

Подробнее