Тренирую работу с классом 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.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости