inverser la chaîne et ensuite, dans un deuxième temps, inverser chaque mot...
en c#, complètement in-place sans tableaux supplémentaires :
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;
}
0 votes
Qu'entendez-vous par tableau supplémentaire ? En plus de celui que vous utiliseriez pour stocker les "tokens" (c'est-à-dire les mots), ou en plus de la chaîne de caractères que vous avez donnée en exemple ?
3 votes
Dupe : stackoverflow.com/questions/47402/
21 votes
string.split(' ').reverse().join(' ')
6 votes
Utilise de la mémoire supplémentaire
0 votes
Comme le dit KodeSeeker, la solution zzzzBov crée plusieurs tampons intermédiaires. En outre, si la plate-forme de votre choix utilise des chaînes "inmutables" (comme .NET), vous créez certainement de l'espace supplémentaire, ce qui mérite d'être mentionné dans l'entretien.