Created
March 16, 2020 14:02
-
-
Save 1ou/1fe1cd2052bf96a71fb1bffe7735729e to your computer and use it in GitHub Desktop.
yandex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Дана строка, состоящая из букв A-Z: | |
* "AAAABBBCCXYZDDDDEEEFFFAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBB" | |
* Нужно написать функцию RLE, которая на выходе даст строку вида: | |
* "A4B3C2XYZD4E3F3A6B28" | |
* И сгенерирует любую ошибку, если на вход пришла невалидная строка. | |
* | |
* Пояснения: | |
* 1. Если символ встречается 1 раз, он остается без изменений | |
* 2. Если символ повторяется более 1 раза, к нему добавляется количество повторений | |
*/ | |
AB | |
public String rle(String str) { | |
if (str == null) { | |
return ""; // or exception | |
} | |
if (str.isEmpty()) { | |
return ""; | |
} | |
final StringBuilder stringBuilder = new StringBuilder(); | |
char lastSymbol = str.getCharAt(0); | |
int number = 1; | |
for (int i = 1; i < str.length; ++i) { | |
if (lastSymbol < 'A' || lastSymbol > 'Z') { | |
throw new IllegalStateException(); | |
} | |
if (str.getCharAt(i) == lastSymbol) { | |
number++; | |
} else { | |
stringBuilder.append(lastSymbol); | |
if (number != 1) { | |
stringBuilder.append(number); | |
} | |
number = 1; | |
lastSymbol = str.getCharAt(i); | |
} | |
} | |
stringBuilder.append(lastSymbol); | |
if (number != 1) { | |
stringBuilder.append(number); | |
} | |
return stringBuilder.toString(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment