Java - Ayuda con una cadena de longitud N

 
Vista:
sin imagen de perfil

Ayuda con una cadena de longitud N

Publicado por Maria (3 intervenciones) el 25/09/2022 23:36:12
Necesito ayuda urgente con este ejercicio:

* Se pretende trabajar con listas de caracteres donde se supone que con frecuencia aparecerán muchos caracteres consecutivos repetidos. Por ejemplo: eeeeeeeeeeeeeaaa@@@@@@aaaaaaaaiiiiiiiiiiiiiiicffff


* Para ahorrar espacio dichas cadenas se van a representar como cadenas de pares (c, n) donde cada par represente una subcadena de caracteres repetidos. Por ejemplo el par ('*',4) representa la cadena '****'. De esta forma la cadena de arriba va a ser representada como la secuencia de pares:

* ('e', 13) ('a',3) ('@',6) ('a',8) ('i',15) ('c',1) ('f',4)

* Defina un función que reciba por parámetro una cadena de longitud N, y que de cómo resultado la secuencia de pares, como se mostró anteriormente.

Si alguien me podría ayudar con el ejercicio estaría agradecida.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con una cadena de longitud N

Publicado por Kabuto (1381 intervenciones) el 26/09/2022 18:25:06
La lógica a seguir sería recorrer la cadena carácter a carácter y usar un contador para ir contado cada repetición.

Se comenzaría seleccionado el primer carácter de la cadena y estableciendo el contador a valor 1.

Con un bucle, se recorren el resto de caracteres.
Si el carácter que se está recorriendo es el mismo que el "actual", aumentamos contador y pasamos al siguiente.
Si es distinto, entonces ya podemos construir un par, es decir, una cadena con el carácter actual y el valor del contador.
Tras construir el par, seleccionamos el nuevo carácter como el "actual" y reiniciamos el contador a valor 1 para volver a repetir el proceso.

Al terminar el bucle cuando llega al final de la cadena, podremos construir el último par de nuestra secuencia de pares.

Los pares construidos, podemos ir mostrándolos en pantalla según se van creando. O bien ir juntándolos todos en un String para retornarlo al terminal la función.
Podemos usar un StringBuilder, que es más óptimo para ir construyendo una cadena.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public class SecuenciaPares {
 
	public static void main(String[] args) {
 
		final String CADENA = "eeeeeeeeeeeeeaaa@@@@@@aaaaaaaaiiiiiiiiiiiiiiicffff";
 
		System.out.println("Cadena original:\n" + CADENA);
 
		System.out.println("\nSecuencia de pares obtenida:\n" + secuenciaDePares(CADENA));
	}
 
	private static String secuenciaDePares(String cadena) {
 
		StringBuilder pares = new StringBuilder();
		//Comenzamos contando primer caracter
		char actual = cadena.charAt(0);
		int cont = 1;
		//Con el bucle comprobamos los siguientes caracteres hasta el final
		for (int i = 1; i < cadena.length(); i++) {
			if (cadena.charAt(i) == actual) //Mismo caracter
				cont++; //Contamos
			else { //Se ha encontrado una nuevo caracter
				//Agregamos par del caracter actual
				pares.append(String.format("('%s',%d)", actual, cont));
				//Renovamos caracter actual
				actual = cadena.charAt(i);
				//Reiniciamos contador
				cont = 1;
			}
		}
		//Bucle finalizado, añadimos el último par obtenido
		pares.append(String.format("('%s',%d)", actual, cont));
		//Retornamos la secuencia de pares construida
		return pares.toString();
	}
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar