Contar caracteres de uma string

Amigos, preciso contar os caracteres iguais de uma string por exemplo: string input: “dddaaaacccaaaaaa” output “3d4a3c6a” ele não pode somar a primeira sequencia de “a” com a segunda, como eu faço isso? só consegui fazer usando substring, porém ai eu teria que conhecer a string, exemplo String conta1 = string.substring(0, 3); output 3d etc

Vc precisa tratar a string como uma coleção de caracteres.

Caso mais simples:
“a” vira 1a certo?
“aa” vira 2a
"ab" vira 1a1b
"abba" vira 1a2b1a

Comofas?

1 agrupe as letras!

int tamanho = string.length();
char letra_anterior = string.charAt(0);
int vezes = 1;
for(int i=1; i < tamanho; i++){
   char letra_atual = string.charAt(i);
   // se letra anterior == atual então incrementa vezes
   // senao vc esta numa letra diferente 
   // pode imprimir vezes,letra
   // no final troca letra anterior pela atual
}

Analise essa lógica: vc pega a primeira letra e segue comparando. Mudou (a pra b)? Recomeça o ciclo, agora pra próxima letra

Tem varias formas de melhorar esse codigo. Tentei ser didatico

Obrigado pela ajuda. Fiz o que você falou, porém ele me retorna (output 1a 1b 2b 2a 2c ) e se eu zerar a variável vezes ao final ele me retorna tudo 1, não consigo ver o que está errado

    String string = "abbac";
    
    int tamanho = string.length();
    char letra_anterior = string.charAt(0);
    int vezes = 0;
           
    for(int i=0; i < tamanho; i++){ 
      char letra_atual = string.charAt(i);
      
    if (letra_anterior == letra_atual) {  
        vezes ++;  
        System.out.print(vezes + "" + letra_atual + " ");
    }
     else {
        letra_anterior = letra_atual;         
    } 
     
    System.out.print(vezes + "" + letra_atual + " ");
}

Vamos la

tem um motivo deu ter iniciado vezes com 1, e iniciado for loop em 1: se a string tem apenas uma letra, ela aparece apenas 1 vez. vc não precisa de loop para saber disso. mas ok, se vc inicia o loop em zero entao vezes tem que ser zero.

agora perceba que, se a letra anterior nao for igual a letra atual, vc deve reiniciar a contagem no else. mas vai reiniciar com que valor? não é “zerar” a variavel. vc vai fazer vezes = 1;

por que? por que a letra nova apareceu 1 vez ate entao.

1 curtida