Редакция для Только буквы
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
1. Идея
Нужно пройти по строке и оставить только те символы, которые являются латинскими буквами:
- от
aдоz - от
AдоZ
Все остальные символы просто пропускаются.
Так как порядок букв менять нельзя, удобно строить ответ слева направо: если текущий символ — буква, добавляем его в результат, иначе игнорируем.
2. Наблюдения
- Вход — одна строка без пробелов, значит её можно просто считать целиком.
- Проверка, является ли символ латинской буквой, делается очень просто:
- либо
cнаходится междуaиz - либо
cнаходится междуAиZ
- либо
- Никаких сложных структур данных не нужно.
- Если в строке нет ни одной буквы, ответом будет пустая строка.
3. Алгоритм
- Считать строку
s. - Создать пустой результат.
- Для каждого символа
cв строке:- если
cлежит в диапазонеa–zилиA–Z, добавить его в ответ; - иначе ничего не делать.
- если
- Вывести получившуюся строку.
4. Почему это работает
Мы просматриваем все символы строки ровно в том порядке, в котором они стоят.
- Если символ является латинской буквой, по условию его нужно сохранить, и алгоритм добавляет его в ответ.
- Если символ не является латинской буквой, по условию его нужно удалить, и алгоритм его пропускает.
Значит, в ответ попадут все и только нужные символы, причём в исходном порядке. Это в точности и требуется.
5. Сложность
Пусть длина строки равна n.
- Время работы:
O(n), потому что каждый символ проверяется один раз. - Дополнительная память:
O(n)в худшем случае, если вся строка состоит из букв.
6. Код на C++17
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
string ans;
for (char c : s) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
ans += c;
}
}
cout << ans << '\n';
return 0;
}
7. Код на Python 3
s = input()
ans = []
for c in s:
if ('a' <= c <= 'z') or ('A' <= c <= 'Z'):
ans.append(c)
print(''.join(ans))
Комментарии