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.