1. Introducción al tema
URLización. Escriba un método para reemplazar todos los espacios en la cadena con% 20. Se supone que hay suficiente espacio al final de la cadena para almacenar nuevos caracteres y se conoce la longitud "real" de la cadena. (Nota: si está implementado en Java, utilice una implementación de matriz de caracteres para poder operar directamente en la matriz).
Ejemplo 1:
Entrada: "Mr John Smith", 13
Salida: "Mr% 20John% 20Smith"
Ejemplo 2:
Entrada: "", 5
Salida: "% 20% 20% 20% 20% 20"
Mensaje:
La longitud de la cadena está en el rango de [0, 500000].
Fuente: LeetCode
Enlace: https://leetcode-cn.com/problems/string-to-url-lcci
Copyright es propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.
Dos ideas para resolver problemas
Detecte espacios en la cadena y reemplácelos con% 20. Si usa una cadena para completar esta pregunta, ya que la longitud de la cadena continúa aumentando, cuando excede el tamaño de espacio predeterminado del objeto de cadena, la redistribución y copia del espacio de almacenamiento provocará una sobrecarga relativamente grande . Por lo tanto, el método de solicitar memoria adicional se adopta para solicitar dinámicamente una longitud fija de memoria por adelantado para evitar el problema de la redistribución y copia del espacio de almacenamiento.
Tres, código de resolución de problemas
方法一:
class Solution {
public:
string replaceSpaces(string S, int length) {
//字符串存储空间的再分配和复制开销比较大
string str;
for(int i = 0; i < length; ++i)
{
if(S[i] == ' ')
str += "%20";
else
str += S[i];
}
return str;
}
};
方法二:
class Solution {
public:
string replaceSpaces(string S, int length) {
//最大3 * length + 1
char *arr = new char[3*length + 1];
int j = 0;
for(int i = 0; i < length; ++i)
{
if(S[i] == ' ')
{
arr[j++] = '%';
arr[j++] = '2';
arr[j++] = '0';
}
else
arr[j++] = S[i];
}
arr[j] = '\0';
return string(arr);
}
};