J'ai résolu le problème sans utiliser d'espace supplémentaire en utilisant uniquement la chaîne originale elle-même, mais je n'ai pas pu résoudre le problème en O(n), le moins que je puisse obtenir est O(n carré), et ce pour le pire des scénarios.
La façon dont j'ai mis en œuvre -
- Inversez toute la phrase, caractère par caractère.
- Plus tard, itérez la phrase entière mais cette fois-ci, inversez chaque mot.
ET C'EST POURQUOI J'AI OBTENU LA PLUS GRANDE COMPLEXITÉ EN TEMPS QU'O(n sqaure)
Veuillez trouver le code ci-dessous en java, j'espère que cela aidera quelqu'un.
class MainClass {
public static void main(String args[]) {
String str = "reverse me! also lets check";
System.out.println("The initial string is --->> " + str);
for (int i = 0; i < str.length(); i++) {
//Keep iterating each letter from one end to another.
str = str.substring(1, str.length() - i)
+ str.substring(0, 1)
+ str.substring(str.length() - i, str.length());
}
System.out.println("The reversed string is ---->> " + str);
for (int i = 0, j = 0; i < str.length(); i++) {
if(str.charAt(i) == ' ' || i == (str.length() - 1)) {
//Just to know the start of each word
int k = j;
//the below if condition is for considering the last word.
if(i == (str.length() - 1)) i++;
while(j < i) {
j++;
str = str.substring(0, k)
//(i-j) is the length of each word
+ str.substring(k + 1, (k + 1) + i - j)
+ str.substring(k, k + 1)
+ str.substring((k + 1) + i - j, i)
+ str.substring(i);
if(j == i) {
//Extra j++ for considering the empty white space
j++;
}
}
}
}
System.out.println("The reversed string but not the reversed words is ---->> " + str);
}
}
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.