Для приведённого примера нужно схлопнуть соседние одинаковые буквы без учёта регистра, сохранив первый символ серии. Но такой алгоритм не отличает залипание от настоящих двойных букв.
Устранение повторяющихся символов в строке
Для приведённого примера нужно схлопнуть соседние одинаковые буквы без учёта регистра, сохранив первый символ серии. Но такой алгоритм не отличает залипание от настоящих двойных букв.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализовать функцию, которая удаляет лишние повторения символов, возникающие из‑за залипания клавиши, из заданной строки.
String inputStr = "Ззддррррррааавствввууй, Сссссбееееррр!";
String expectedStr = "Здравствуй, Сбер!";
Ответ
Для приведённого примера нужно схлопнуть соседние одинаковые буквы без учёта регистра, сохранив первый символ серии. Но такой алгоритм не отличает залипание от настоящих двойных букв.
static String removeStuckKeys(String input) {
int[] chars = input.codePoints().toArray();
StringBuilder out = new StringBuilder();
int previous = -1;
for (int c : chars) {
int folded = Character.toLowerCase(c);
if (folded != previous) out.appendCodePoint(c);
previous = folded;
}
return out.toString();
}
Получится «Здравствуй, Сбер!». Время O(n), память O(n). Слово «касса» превратится в «каса»: восстановление правильного текста в общем случае требует словаря или контекста. Здесь решается только формальное схлопывание серий, не универсальное исправление орфографии.