Тренирую работу с классом String
. Стоит задача по RLE:
На вход подается строка (допустим, Jjjjaavvva
). Результатом должно быть Jj4a2v3a
.
Макс. количество повторов - 9. Для aaaaaaaaaa
(10 букв a
) это должно записываться как a9a1
.
Я думаю пробежаться по массиву этой строки и где есть совпадения сделать substring
этой области и split
, а потом считать кол-во и делать конкатенацию.
Как это реализовать лучше? Может, есть готовые решения?
Достаточно пройти один раз по всем символам строки и собрать новую строку в StringBuilder
.
При просмотре очередного символа идёт проверка:
Код реализации:
public static String getRLE(String str)
{
if (str == null || str.equals(""))
{
return str;
}
char currentChar = str.charAt(0);
int currentCharCount = 1;
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= str.length(); i++)
{
char c = i < str.length() ? str.charAt(i) : 0;
if (i == str.length() || currentCharCount == 9 || c != currentChar)
{
sb.append(currentChar);
sb.append((char)(currentCharCount + '0'));
currentCharCount = 1;
currentChar = c;
}
else
{
currentCharCount++;
}
}
return sb.toString();
}
Для строки aaaaaaaaaabbbccca
результатом будет a9a1b3c3a1
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Наш сервер соединяется к провайдеру данных по протоколу TCP/IP, после чего тот начинает присылать сообщения следующего формата: