Sword se refiere a la oferta 58. Invertir el orden de las palabras, análisis de columnas y código [Java]
1. Título
Niuke llegó recientemente a Fish, un nuevo empleado, siempre tomaba una revista en inglés cada mañana y escribía algunas frases en su cuaderno. Mi colega Cat estaba muy interesado en lo que escribió Fish. Un día se lo pidió prestado a Fish para leerlo, pero no pudo leerlo. Por ejemplo, "estudiante. Soy yo". Más tarde me di cuenta de que este tipo había invertido el orden de las palabras en la oración, la oración correcta debería ser "Soy un estudiante". Cat no es bueno para cambiar estas palabras una por una. ¿Puedes ayudarlo?
Dos, análisis y código
1. Dos volteretas
(1) Pensando
Primero voltee cada palabra y luego voltee la oración completa dos veces para lograr el objetivo.
(2) Código
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
char[] chstr = str.toCharArray();
int l = 0, length = str.length();
for (int i = 0; i < length; i++) {
if (chstr[i] == ' ') {
Reverse(chstr, l, i - 1);
l = i + 1;
}
if (i == length - 1 && l < i)
Reverse(chstr, l, length - 1);
}
Reverse(chstr, 0, length - 1);
return String.valueOf(chstr);
}
public void Reverse(char[] chstr, int l, int r) {
int m = (l + r) >> 1;
for (int i = l; i <= m; i++) {
char temp = chstr[i];
chstr[i] = chstr[l + r - i];
chstr[l + r - i] = temp;
}
return;
}
}
(3) Resultados
Tiempo de ejecución: 21 ms, memoria ocupada: 9648k.
2. Empalme directo
(1) Pensando
Si se permite el espacio auxiliar, simplemente empalme la cuerda original directamente.
(2) Código
public class Solution {
public String ReverseSentence(String str) {
if (str.trim().equals(""))
return str;
String[] substr = str.split(" ");
String ans = substr[substr.length - 1];
for (int i = substr.length - 2; i >= 0; i--)
ans = ans.concat(" " + substr[i]);
return ans;
}
}
(3) Resultados
Tiempo de ejecución: 20 ms, memoria ocupada: 9360k.
Tres, otro
Nada.