URLify
Escribe una función que remplace todos los espacios en un String por un “%20”. Has de suponer de que el String tiene la longitud suficiente para contener los caracteres adicionales que necesita. Dentro de esta función también se te dará la “longitud verdadera” - esto quiere decir la longitud que tiene el string sin los espacios adicionales.
Por ejemplo si te damos:
String:
String s = “Mr John Smith ";
int TrueLength = 13;
Deberías de retornar: “Mr%20John%20Smith”
Link aquí hacia el repo para solucionar el problema
👉👌 Tips
Muchas veces es mas fácil modificar un String iterando con un loop desde el final hasta el principio
Puede que necesites saber de antemano el numero de espacios que necesitas, podrías simplemente contarlos?
👊 Solución 1
Una forma muy común y eficiente de hacer edición de Strings es editándola comenzando por el final. Esto es bastante util ya que contamos con un cierto “buffer” al final que nos permite editar sin preocuparnos por lo que estamos sobre escribiendo.
En esta solución emplearemos dos "scans” en el primero contaremos los espacios que tenemos en el “trueLength”, si multiplicamos esto por 2 y lo sumamos al trueLength tendremos el length total del String ya con los “%20” añadidos.
En el segundo scan (que se hará de atras hacia adelante) cuando encontremos un espacio añadiremos un “02%”, y si encontramos un carácter simplemente lo copiamos.
public void solution(char[] str, Integer trueLength) {
int spaceCount = 0, index;
for (int I = 0; I < trueLength; I++) {
if(str[I] == ‘ ‘) spaceCount++;
}
index = trueLength + (spaceCount * 2);
if (trueLength < str.length) str[trueLength] = ‘\0’; // end array
for (int I = trueLength - 1; I >= 0; I—) {
if (str[I] == ‘ ‘) {
str[index - 1] = ‘0’;
str[index - 2] = ‘2’;
str[index - 3] = ‘%’;
index = index - 3;
} else {
str[index - 1] = str[I];
index—;
}
}
}
Pregunta prestada del libro “Cracking the coding interview”