Сжатие строки за один проход

Считайте длину каждой серии одинаковых символов и дописывайте число только для серий длиннее одного. В первом тесте ошибка: в aabccccaaa четыре c, поэтому правильно a2bc4a3.

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

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

Считайте длину каждой серии одинаковых символов и дописывайте число только для серий длиннее одного. В первом тесте ошибка: в aabccccaaa четыре c, поэтому правильно a2bc4a3.

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

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

Условие

Необходимо написать функцию compress, которая преобразует входную строку, заменяя последовательные одинаковые символы на сам символ и количество его повторений, если повторений больше одного. Одинокие символы оставляются без изменений. Учёт регистра обязателен.

public class StringTask {

    public static void main(String[] args) {
        runTest("aabccccaaa", "a2bc5a3");
        runTest("abcdef", "abcdef");
        runTest("AAaaBB", "A2a2B2");
    }

    public static void runTest(String src, String exp) {
        String result = compress(src);
        if (!result.equals(exp)) {
            System.out.printf("Test failed for input: %s%n, expected: %s, actual: %s%n", src, exp, result);
        } else {
            System.out.printf("Test passed for input: %s%n", src);
        }
    }

    public static String compress(String src) {
        //
    }
}

Ответ

Считайте длину каждой серии одинаковых символов и дописывайте число только для серий длиннее одного. В первом тесте ошибка: в aabccccaaa четыре c, поэтому правильно a2bc4a3.

public static String compress(String src) {
    java.util.Objects.requireNonNull(src);
    StringBuilder out = new StringBuilder();
    for (int i = 0; i < src.length();) {
        char c = src.charAt(i++);
        int count = 1;
        while (i < src.length() && src.charAt(i) == c) { i++; count++; }
        out.append(c);
        if (count > 1) out.append(count);
    }
    return out.toString();
}

Время O(n), память O(n) под результат. Регистр учитывается, пустая строка поддерживается. Единица обработки — UTF-16 char. Если исходник содержит цифры, формат без экранирования не гарантирует однозначного восстановления.

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

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

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

Подробнее