Я ищу реализовать метод для выполнения базового сжатия строки в виде:Строка алгоритм сжатия в Java
aabcccccaaa -> a2b1c5a3
У меня есть эта программа:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println(compress(str));
}
public static String compress(String str) {
char[] chars = str.toCharArray();
int count = 0;
String result = "";
for (int i = 0; i < chars.length; i++) {
char curr = chars[i];
result += curr;
for (int j = i; j < chars.length; j++) {
if (chars[j] == curr) {
count++;
}
else {
i += count;
break;
}
}
result += count;
count = 0;
}
return result;
}
}
Но в моих тестах я всегда не хватает последнего количества символов.
Я предполагаю, что это потому, что программа выходит из внутреннего цикла цикла, прежде чем это произойдет, но почему это так?
Большое спасибо
ага вам нужно следить за последним персонажем, с которым вы попадаете, и когда вы выходите из цикла for, добавьте a3 в свою строку –
Запустив его с помощью aaabbbccc, вы получите a3b2c2c1. Вам нужно пересмотреть свой алгоритм. В частности, о том, как вы увеличиваете i. –
Не создавайте потенциально долго 'String' добавление "к текущему неизменяемому значению переменной типа' String': используйте ['StringBuilder.append()'] (https://docs.oracle.com/javase /8/docs/api/java/lang/StringBuilder.html#method.summary). Попробуйте использовать только одну итерацию. – greybeard