Implemente una función para reemplazar cada espacio en la cadena s con "% 20".
El método más simple es ordenar fuera de lugar, atravesar la cadena una vez y almacenarla en la cadena de resultados, por lo que la complejidad del espacio es O (n).
Si se requiere ordenar en el lugar, cada vez que se atraviesa un espacio, el contenido después del espacio se mueve hacia atrás dos espacios para almacenamiento %20
, por lo que la complejidad del tiempo es O (n²). También puede recorrer la cadena una vez para calcular la longitud de la nueva cadena y luego copiarla de atrás hacia adelante, de modo que la complejidad del tiempo se reduzca a O (n):
class Solution {
public:
string replaceSpace(string s) {
int newSz = 0;
for (char c : s) {
if (c == ' ') {
newSz += 3;
} else {
++newSz;
}
}
int oldSz = s.size();
s.resize(newSz);
--oldSz;
--newSz;
while (newSz != oldSz) {
if (s[oldSz] != ' ') {
s[newSz--] = s[oldSz--];
} else {
--oldSz;
s[newSz--] = '0';
s[newSz--] = '2';
s[newSz--] = '%';
}
}
return s;
}
};