Условие задачи
Взята с сайта.
Мюллер много раз пытался поймать Штирлица с поличным, но тот всё время выкручивался. Как-то раз Штирлиц просматривал электронную почту. В это время незаметно вошел Мюллер и увидел, как у него на экране появился бессмысленный набор символов. «Шифровка», — подумал Мюллер. «UTF-8», — подумал Штирлиц.
Известно, что Штирлиц шифрует текст следующим образом:
1)Убирает все пробелы и знаки препинания.
2)Заменяет все подряд идущие одинаковые буквы на одну такую букву.
3)Многократно вставляет в произвольное место текста две одинаковых буквы.
Попробуйте восстановить текст, каким он был после второго шага. Для этого удалите из текста все пары одинаковых символов, добавленные на третьем шаге.
Входные данные
aaxxHuuuuelllnnloxxvvoo!
Выходные данные
Hello!
Решение с использованием функционала класса String
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { ArrayList arr = new ArrayList(); String str,str2; String empty = ""; Scanner input = new Scanner(System.in); str = input.nextLine(); for(int i = 0;i < str.length(); i++) { str2 = empty; str2 += str.charAt(i); if(i == str.length()-1) arr.add(str2); else { if(str.charAt(i) == str.charAt(i+1)) i++; else arr.add(str2); } } for(int i = 0;i < arr.size();i++) { System.out.print(arr.get(i)); } } } |
Решение с использованием функционала структуры данных ArrayList
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.*; import java.lang.*; import java.io.*; /* Name of the class has to be "Main" only if the class is public. */ class Ideone { public static void main (String[] args) throws java.lang.Exception { ArrayList arr = new ArrayList(); Scanner input = new Scanner(System.in); String str,str2; String empty = ""; str = input.nextLine(); for(int i = 0;i<str.length();i++) { str2 = empty; str2 += str.charAt(i); arr.add(str2); } for(int i = 0;i < arr.size(); i++) { if(i != arr.size()-1) { if(arr.get(i).equals(arr.get(i+1))) { arr.remove(i); arr.remove(i); i--; } } } for(int i = 0;i < arr.size();i++) { System.out.print(arr.get(i)); } } } |
Решение
Записываем строку в переменную типа $latex String$. Записываем ее в $latex ArrayList$ посимвольно. В следующем цикле добавляем проверку на индекс текущего элемента чтобы не выйти за пределы списка и проверяем совпадают ли ближайшие 2 символа, если да то удаляем их, если нет то переходим к следующему шагу цикла. По его окончанию выводим элементы списка.
Пример решения со строками на ideone.
Пример решения с списком на ideone.