Я пытаюсь сжать строку, превратив ее в буквы и цифры. Пример:Сжатие файлов
INPUT: AAAAbbWWWW
OUTPUT: A4-b2-W4
Вот проблема, я бегу, чтобы:
Когда я запускаю его с запросом "AAAAAAA", я получаю "a7".
Когда я запускаю его с запросом "aaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbb", я получаю "a12-b2-b2-b2-b2-b2-b2-b2-b2-b2-b2-b2-b2-b2-b2".
Мой код
List<Character> chars = new ArrayList<Character>();
for (int i = 0; i < toCompress.length(); i++) {
chars.add(toCompress.charAt(i));
}
List<String> bits = new ArrayList<String>();
for (int i = 0; i < chars.size(); i++) {
char toMatch = chars.get(i);
int matching = 1;
for (int dontuse = i; dontuse < chars.size(); dontuse++) {
int x = dontuse + 1;
if (x >= chars.size()) {
continue;
}
if (chars.get(x) == toMatch && (x - 1 == matching)) {
matching++;
}
}
if (!bits.contains(toMatch + "" + matching)) {
bits.add(toMatch + "" + (matching + 1));
i = i + matching;
}
}
String compressed = "";
for (int y = 0; y < bits.size(); y++) {
if (y == (bits.size() - 1)) {
compressed += bits.get(y);
} else {
compressed += bits.get(y) + "-";
}
}
return compressed;
Может кто-нибудь сказать мне, как остановить его только считать до двух в каждом сегменте, но в первую очередь?
Почему вы не используете карту с ключом = char и значением = #iteration? Это было бы просто. Если вам нужен ваш вывод в виде строки, также довольно легко преобразовать карту в нужную строку. – isanco
Я вижу. Я попробую это и опубликую свои результаты. Благодарю. –
@isanco На карте ключи не заказываются. Думаю, здесь вывод должен быть заказан как вход. потому что он сжимает строку. – YoungHobbit