e-olymp 2165. Лишние пробелы

Задача

Дана строка. Напишите программу, которая удалит из этой строки все лишние пробелы.
Пробел является лишним, если выполняется хотя бы 1 из условий:

  • он находится в самом начале строки, до самого первого слова;
  • он находится в конце строки, после самого последнего слова;
  • несколько пробелов расположены между двумя словами (проще говоря, если слова разделены более чем одним пробелом, тогда все пробелы кроме одного — лишние).

Входные данные

Дана строка s. Строка содержит только латинские буквы и пробелы.

Выходные данные

Строка без лишних пробелов.

Тесты

Входные данные Выходные данные
1 «Alexandr      Sergeevich   Pushkin» «Alexandr Sergeevich Pushkin»
2 «JohnSnow» «JohnSnow»
3 » Mr    Charlie       Chaplin » «Mr Charlie Chaplin»
4 «Mechnikov    University» «Mechnikov University»
5 «Daenerys          Targaryen» «Daenerys Targaryen»

Код

Ссылка на ideone.
Ссылка на e-olymp.

Решение

Вводим строку s, которая содержит латинские буквы и пробелы. Используем метод replaceAll()  для удаления лишних пробелов. Чтоб не удалить последний оставшийся пробел используем regex " +", " " . «Прочитать» его по-русски можно так: " +"  — выделить 1 или больше пробелов до символа, не являющимся пробелом и " "  — заменить выделенную последовательность на 1 пробел. Проверяем символы на концах строки на наличие пробела. Перезаписываем подстроку без пробелов в строку s.

Затем выводим полученную строку.

АА14

Задача

В заданной строке удалить первый символ ‘ . ‘, который найдется в строке.

Тесты

Входная строка Строка на выходе
 1 22.11.11 2211.11
 2 java.mazurok.com javamazurok.com
 3 Suspect The dot was not found.

Решение

Проверить работу кода можно в облаке по ссылке — Ideone.

Пояснения

Для редактирования строки  mainString , используем класс обертку  StringBuilder. Находим индекс первого вхождения точки в строке и записываем его в переменную  dotIndex , после чего выполняем проверку, нашла ли функция  indexOf()  точку в строке. Если нет, выводим соответствующее сообщение. Иначе же выполняем удаление символа из строки по индексу с помощью функции  deleteCharAt() и выводим результат в консоль.

e-olymp 2166: Анаграммы

Задача

Слово называется анаграммой другого слова, если оно может быть получено перестановкой его букв.

Входные данные

Два слова заданы в отдельных строках. Слова состоят из строчных латинских букв и цифр. Длины слов не превышают 255.

Выходные данные

Следует вывести «YES«, если введенные слова являются анаграммами друг друга и «NO» если нет.

Решение

В задаче требуется определить являются ли два введенных слова анаграммами.
Основная проблема состоит в том, что буквы находятся в словах на различных позициях и это мешает нам просто сравнить строки. Поэтому упорядочим символы в строке по алфавиту с помощью метода Arrays.sort, который вызываем в функции sortString, которая вернет нам новую отсортированную строку.
Теперь мы можем выполнить сравнение строк с помощью функции equals(), которая вернет нам true только в том случае, если строки идентичны. В таком случае и выводим «YES», а в противном случае «NO».

Код

На Ideone.

Тест

Входные данные Выходные данные
sharm

marsh

YES
ananas

nnaass

NO
tommarvoloriddle
iamlordvoldemort
YES

Ссылка на задачу на e-olimp и на ее решение.

Layout change

Условие

Часто происходит так, что пользователи, вводя текст на некотором языке, забывают переключить раскладку клавиатуры на этот язык. Если при этом пользователь не владеет методом слепой печати, он может обнаружить свою ошибку, уже набрав немалое количество текста. Чтобы избавить пользователя от необходимости перепечатывать весь текст в нужной раскладке, можно написать программу, которая сделает это за него.

Входные данные

На вход подается некоторая строка текста, который нужно изменить.

Выходные данные

Вывести исходную строку текста, «перепечатанную» в другой раскладке.

Примечание: Данная программа работает с русской и английской раскладкой клавиатуры. Весь текст, в какой бы из этих расскладок не был введен, перепечатывается в другой раскладке: русский — в английский, английский — в русский.

Тесты :

Ввод Вывод
Руддщб цщкдв! Hello, world!
Ghbdtn? vbh! Привет, мир!
Шэь пдфв ещ ыуу нщг I’m glad to see you
Rfr ltkf& Как дела?
ащк (ште ш = 0ж ш Б тж ш++) for (int i = 0; i < n; i++)

Код на Java:

Алгоритм:

В памяти хранятся строки соответствия. Каждому символу одной строки соответствует символ другой строки на той же позиции, но соответствующий символ — из другой раскладки.

Вводим строку, которую требуется заменить. Измененный вариант будет записываться в другой, временной строке.

Далее проходим по всей введенной строке. Если некоторый текущий символ можно заменить, записываем измененный символ. Если нет, то записываем исходный.

А в конце переписываем исходную строку и выводим ее:

Ссылки:

Рабочий код для тестирования на Ideone.com: Ideone.com

e-olymp 378. Таинственная записка

Задача e-olymp 378.

Условие

Недавно Маша и Катя узнали, что в мире существуют злые хакеры, которые могут запросто вскрыть чужую переписку. Поэтому решили они пересылать только зашифрованные сообщения. Для этой цели подруги стали использовать перестановочный код, где каждая буква заменяется другой. Например:

Закодированное сообщение: HPC PJVYMIY

Декодированное сообщение: ACM CONTEST

В этом примере выполнены следующие замены: H=A, P=C, C=M, J=O, V=N, Y=T, M=E иI=S.

Чтобы не заниматься кодированием и декодированием вручную, подруги просят Вас написать программу. Помогите девочкам!

Входные данные

В первой строке входного файла записано закодированное сообщение. Вторая строка –26 латинских букв верхнего регистра, представляющих собой код для соответствующего символа алфавита: первый символ дает код для A, второй для B и так далее. Используются только буквы верхнего регистра. В закодированном сообщении могут появиться пробелы, которые должны быть сохранены в выходной строке.

Выходные данные

В выходной файл вывести одну строку, в которой содержится расшифрованное сообщение.

Тесты

Входные данные Выходные данные
HPC PJVYMIYBLMRGJIASOPZEFDCKWYHUNXQTV ACM CONTEST
FDY GAI BG UKMY
KIMHOTSQYRLCUZPAGWJNBVDXEF
THE SKY IS BLUE
LJBSLJL IJWWDEJ
KCFAGWRZMEXDNUYHVBOIJLSTPQ
DECODED MESSAGE

Код

Решение

Чтоб расшифровать послание, нужно определить порядковый номер каждого символа, из введённого сообщения, в алфавите. Потом заменить их символом соответствующего порядкового номера из второй введённой строки.

Ссылка на Ideone