Algorithme pour imprimer toutes les combinaison de lettres de la chaîne dans l'ordre lexicographique
J'ai essayé de créer le code pour générer toutes les combinaisons possibles de la chaîne dans l'ordre lexicographique:
Le code que j'ai écrit est:
void get(char *n)
{
int l=strlen(n);
sort(n,n+l);
int k=0,m,i,j,z;
while(k<l)
{
m=k;
for(i=k;i<l;i++)
{
for(j=k;j<=i;j++)
cout<<n[j];
cout<<"\n";
}
for(z=m+2;z<l;z++)
cout<<n[m]<<n[z]<<"\n";
k++;
}
}
int main()
{
char n[100];
cin>>n;
get(n);
return 0;
}
Supposons que la chaîne est : abcde
Mon code n'est pas de générer des combinaisons telles que:
abd
abe
La sortie, je suis pour la chaîne abcde sont:
a
ab
abc
abcd
abcde
ac
ad
ae
b
bc
bcd
bcde
bd
be
c
cd
cde
ce
d
de
e
Ma sortie ne contient pas de chaînes de caractères comme : abd abe
Espère que cela rend la question claire
Comment générer tous ces combinaisons à l'aide d'un algorithme efficace
- La sortie que vous obtenez? Il peut aider à en déduire l'erreur sans avoir à les compiler et exécuter le programme.
- Il est l ,je suis de tri de la chaîne à trouver le lexicographiquement plus petite chaîne qui peut être obtenue par la chaîne puis de procéder
Vous devez vous connecter pour publier un commentaire.
C'est une simple approche récursive:
Peut-être pas le moyen le plus efficace de le faire, mais une courte et simple. Gardez à l'esprit, que l'énumération de toutes les combinaisons a une complexité de O(2n) de toute façon. Donc, il n'existe pas d'algorithme efficace à tous.
Suivantes peuvent vous aider:
Live exemple