Пройдите по символам, меняя верхний регистр на нижний и наоборот, затем соедините фрагменты. В Unicode смена регистра может менять длину строки, поэтому не заменяйте символы по фиксированным позициям.
Переворот регистра символов в строке
Пройдите по символам, меняя верхний регистр на нижний и наоборот, затем соедините фрагменты. В Unicode смена регистра может менять длину строки, поэтому не заменяйте символы по фиксированным позициям.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно написать функцию, принимающую строку и возвращающую новую строку, где каждый буквенный символ заменён на символ противоположного регистра: маленькие буквы становятся большими, а большие — маленькими. Все остальные символы (цифры, пробелы, пунктуация и т.п.) оставляются без изменений.
Пример
def toggle_case(text: str) -> str:
# реализация функции
pass
Требования
- Функция должна работать за O(n), где n — длина входной строки.
- Не использовать готовые методы
swapcase(или их аналоги) из стандартных библиотек. - Сохранять исходный порядок символов.
- Обрабатывать Unicode‑символы корректно, если язык позволяет.
Ответ
Пройдите по символам, меняя верхний регистр на нижний и наоборот, затем соедините фрагменты. В Unicode смена регистра может менять длину строки, поэтому не заменяйте символы по фиксированным позициям.
def toggle_case(text: str) -> str:
result = []
for char in text:
if char.isupper() or char.istitle():
result.append(char.lower())
elif char.islower():
result.append(char.upper())
else:
result.append(char)
return ''.join(result)
Это посимвольное Unicode-преобразование: например, ß может стать SS. Оно не обязано быть обратимым двумя вызовами и не реализует все языковые контекстные правила. Для фиксированной версии Unicode время O(n), память O(n).