2010-12-04 3 views
2

Par exemple, dans « 12345123451234512345 », ce qui est un algorithme efficace pour trouver « 12345 »?Un algorithme et un code efficaces pour trouver le cycle dans une chaîne en C++?

codage en C++.

Merci.

+3

Est-ce devoir? Si c'est le cas, il serait poli de le dire. De plus, les questions «envoyez-moi le codez» obtiennent rarement de bonnes réponses. Qu'avez-vous essayé? Quels problèmes avez-vous rencontrés? –

+1

La question n'est pas assez précise sur ce qu'est un "cycle" et quand une chaîne doit en trouver une. – zwol

+0

Est-ce seulement des chiffres? Avez-vous une idée de la taille du cycle? Ou combien de fois il cycles? – Falmarri

Répondre

3

aller sur votre seul exemple:

12345123451234512345 retours 12345

Je pense que ce que vous voulez est de trouver la plus longue aiguille possible qui se répète pour compléter la botte de foin, à savoir 1212121212 =>12, 444 =>4 et ainsi de suite.

La solution la plus simple serait de choisir le premier caractère et courir à travers la chaîne pour comparer les matchs. Si, à un moment donné, vous rencontrez une discordance, choisissez les deux premiers caractères et parcourez toute la chaîne de caractères, et ainsi de suite, jusqu'à ce que la taille de votre fenêtre devienne supérieure à la moitié de la chaîne.

complexité doit être O (n^2)

Vous pouvez optimiser la taille dont la fenêtre vous décrochez basée sur la longueur de la chaîne, à savoir la taille de la fenêtre ne peut être la longueur de diviseurs de la chaîne.

+0

Si vous êtes après le plus long possible, la chaîne "1234512345" n'est-elle pas répétée deux fois dans l'exemple? – abelenky

+0

@abelenky: La fenêtre augmente de taille 1 partir, avec mon algorithme vous arrêter à 12345 car elle correspondra à la chaîne entière =) –

+0

pour 444 ne la réponse est 44? –

Questions connexes