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 — количество уникальных символов)
✅ Используется ранний выход при превышении лимита
✅ Подходит для больших строк