Invertir el orden de las palabras en una cadena.
Resuelto
asked hace 15 años
•
48 respuestas
Tengo esto string s1 = "My name is X Y Z"
y quiero invertir el orden de las palabras para que s1 = "Z Y X is name My"
.
Puedo hacerlo usando una matriz adicional. Lo pensé mucho, pero ¿es posible hacerlo in situ (sin utilizar estructuras de datos adicionales) y con una complejidad de tiempo O (n)?
Aceptado
Invierta toda la cadena, luego invierta las letras de cada palabra individual.
Después del primer paso la cuerda será
s1 = "Z Y X si eman yM"
y después del segundo pase será
s1 = "Z Y X is name My"
invierte la cadena y luego, en una segunda pasada, invierte cada palabra...
en c#, completamente in situ sin matrices adicionales:
static char[] ReverseAllWords(char[] in_text)
{
int lindex = 0;
int rindex = in_text.Length - 1;
if (rindex > 1)
{
//reverse complete phrase
in_text = ReverseString(in_text, 0, rindex);
//reverse each word in resultant reversed phrase
for (rindex = 0; rindex <= in_text.Length; rindex++)
{
if (rindex == in_text.Length || in_text[rindex] == ' ')
{
in_text = ReverseString(in_text, lindex, rindex - 1);
lindex = rindex + 1;
}
}
}
return in_text;
}
static char[] ReverseString(char[] intext, int lindex, int rindex)
{
char tempc;
while (lindex < rindex)
{
tempc = intext[lindex];
intext[lindex++] = intext[rindex];
intext[rindex--] = tempc;
}
return intext;
}
En Smalltalk:
'These pretzels are making me thirsty' subStrings reduce: [:a :b| b, ' ', a]
Sé que a nadie le importa Smalltalk, pero para mí es muy bonito.