Проверка повторяющихся символов в строке

24. Реализовать проверку повторяющихся символов в строке

Условие задачи:
🔥 Реализуйте метод, который принимает на вход непустую строку и проверяет, что в строке отсутствуют символы, повторяющиеся более двух раз.

Метод возвращает:

  • true, если нет символов с более чем двумя повторениями

  • false, если такие символы присутствуют

📌 Пример 1:
Вход: "aabbcc"
Выход: true

📌 Пример 2:
Вход: "aaabbc"
Выход: false

📌 Ограничения:

  • Строка не пустая

  • Может содержать любые символы


Спойлеры к решению
Подсказки
💡 Используйте Map<Character, Integer> для подсчета количества появлений каждого символа.
💡 Если для любого символа количество появлений становится больше двух — сразу возвращайте false.
💡 Добавьте проверку на null и пустую строку.
💡 Решение должно работать за O(n).
💡 Используйте getOrDefault() для компактной записи.
Решение
import java.util.HashMap;
import java.util.Map;

public class StringUtils {

    public static boolean validateString(String input) {
        if (input == null || input.isEmpty()) {
            throw new IllegalArgumentException("Строка не должна быть пустой");
        }

        Map<Character, Integer> charCount = new HashMap<>();

        for (char c : input.toCharArray()) {
            int count = charCount.getOrDefault(c, 0) + 1;

            if (count > 2) {
                return false; // ранний выход
            }

            charCount.put(c, count);
        }

        return true;
    }

    public static void main(String[] args) {
        System.out.println(validateString("aabbcc")); // true
        System.out.println(validateString("aaabbc")); // false
        System.out.println(validateString("abcabc")); // true
    }
}

📌 Что важно помнить:

✅ Временная сложность — O(n)
✅ Пространственная сложность — O(k) (где k — количество уникальных символов)
✅ Используется ранний выход при превышении лимита
✅ Подходит для больших строк