ForHosting KIT · Texte et IA

Détecteur de sous-chaîne répétée

Découvrez si une chaîne n'est qu'un fragment écrit encore et encore : ababab, c'est ab trois fois, aaaa, c'est a quatre fois, alors que aba ne se répète pas. Vous obtenez la plus petite unité et le nombre exact de répétitions. Gratuit dans votre navigateur.

  • Gratuit
  • Fonctionne dans votre navigateur
  • Sans inscription
  • Vos données restent sur votre appareil
Utilisez-le depuis WebAPIE-mailTelegramApp bientôt
Si vous saisissez
Texte
ababab
Vous obtenez
Unité de longueur
2
Quantité
3
Longueur
6

De nombreux problèmes d'entretien et contrôles de nettoyage de données posent une question simple : cette chaîne n'est-elle qu'un fragment plus court écrit encore et encore ? Des chaînes comme ababab, aaaa et xyzxyzxyz sont construites ainsi ; abc et aba ne le sont pas. Ce détecteur de motif de sous-chaîne répétée accepte un unique champ texte non vide, exécute une analyse déterministe de bordure KMP (plus long préfixe-suffixe propre) et renvoie la plus petite unité répétitive avec le nombre exact de répétitions. Aucun appel réseau, aucun hasard, aucune dépendance à l'horloge — uniquement une arithmétique de chaînes que vous pouvez rejouer octet par octet.

Qu'est-ce qu'un motif de sous-chaîne répétée et comment l'unité est choisie

Une chaîne présente un motif de sous-chaîne répétée lorsqu'elle égale une unité non vide écrite bout à bout au moins deux fois, sans caractères restants. Par exemple, ababab est l'unité ab écrite trois fois, aaaa est l'unité a écrite quatre fois et xyzxyz est l'unité xyz écrite deux fois. Le détecteur renvoie toujours la plus petite unité de ce type : si une chaîne peut être pavée par ab et par abab, la réponse est ab avec un compte plus grand, et non le candidat plus long.

Lorsqu'aucune unité plus courte ne couvre la longueur totale, la chaîne est signalée comme non répétée : unit égale le texte d'origine et count vaut un. Le test classique en temps linéaire construit la table KMP du plus long préfixe-suffixe propre pour la chaîne de longueur n, définit period comme n moins la longueur de la bordure finale et vérifie si period divise n et est strictement plus petit que n.

Si les deux conditions tiennent, l'unité est le préfixe de longueur period et le compte est n divisé par period. Cela correspond au balayage par force brute des diviseurs qui essaie chaque longueur de un jusqu'au plancher de n sur deux, mais reste O(n) et ne dépend jamais d'horloges flottantes ni de graines aléatoires.

Les chaînes d'un seul caractère et les résultats vides de validation sont traités explicitement : la longueur un ne peut pas être une répétition non triviale, et un texte vide ou manquant est rejeté avant tout travail LPS.

Où un détecteur de motif répété trouve son utilité

La préparation aux entretiens et les cours d'algorithmes utilisent ce problème pour enseigner bordures, périodes et arguments de diviseurs ; un détecteur en direct permet aux étudiants de vérifier ababab face à aba sans construire à la main des tables LPS sous pression de temps. Les enseignants et auteurs de LMS ont besoin d'un oracle déterministe qui renvoie à la fois l'indicateur booléen du motif et l'unité concrète, afin que les correcteurs automatiques acceptent toute explication correcte nommant le même plus petit fragment.

Les pipelines de qualité des données signalent des colonnes qui ressemblent à des répétitions accidentelles de copier-coller (SKU SKU SKU, yesyesyes) avant qu'elles ne polluent index de recherche ou analytique. Les démonstrations de compression et d'encodage illustrent une structure de type run-length sans prétendre être un compresseur complet : montrer que xyzxyzxyz sont trois copies de xyz suffit souvent pour une diapositive de cours. Une validation échouée ne consomme pas le solde.

Pratique d'entretiens et d'algorithmes

Vérifiez si une chaîne est un motif répété non trivial et nommez la plus petite unité et le compte face aux solutions de manuel KMP et diviseurs.

Qualité des données et collages en double

Signalez les cellules ou jetons qui sont de pures répétitions d'un fragment plus court avant qu'ils n'entrent dans index, catalogues ou analytique.

Comment détecter un motif de sous-chaîne répétée ?

Envoyez une chaîne non vide dans le champ text. Lorsque la chaîne n'est pas une répétition non triviale, unit est la chaîne complète et count vaut 1.

Qu'est-ce que la plus petite unité répétitive ?

C'est le plus court préfixe non vide qui pave la chaîne entière sans reste. Pour ababab l'unité est ab (pas abab). Pour aaaa l'unité est a.

Quel algorithme le détecteur utilise-t-il ?

Un test de période KMP du plus long préfixe-suffixe propre (LPS) : si period = n - lps[n-1] divise n et est plus court que n, l'unité est le préfixe de cette longueur. Équivalent à essayer chaque longueur diviseur, mais en temps linéaire.

Qu'obtient-on quand la chaîne ne se répète pas ?

Une réponse normale, pas une erreur : le résultat indique qu'il n'y a pas de répétition, l'unité est la chaîne entière et le nombre vaut un. Les chaînes uniques ordinaires, comme abc, sont traitées de la même façon.

L'unité doit-elle couvrir toute la chaîne ?

Oui. Une chaîne ne compte comme répétée que si l'unité, écrite au moins deux fois de suite, la couvre sans laisser de caractère en trop. C'est pourquoi aba n'est pas une répétition, même s'il commence et finit par a.

Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.

POSThttps://api.kit.forhosting.com/dev/repeated-substring

Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.

curl -X POST https://api.kit.forhosting.com/dev/repeated-substring \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"ababab"}'
{
  "text": "ababab"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "dev.repeated_substring",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.

par requête$0.002

Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.

HTTPCodeSignification
401unauthorizedClé API absente ou invalide : vérifiez l’en-tête Authorization.
402insufficient_balanceSolde insuffisant : rechargez votre compte pour lancer cette tâche.
404unknown_typeType de tâche inconnu : vérifiez le champ type de votre requête.
429rate_limitedTrop de requêtes : ralentissez la cadence, puis réessayez.

Lorsqu'aucune unité plus courte ne pave la chaîne entière, la réponse marque is_repeated à false, fixe unit au texte complet et count à un, afin que les appelants obtiennent toujours un contrat stable.

Qu'est-ce qu'un motif de sous-chaîne répétée et comment l'unité est choisie

Ce contrat est plus favorable aux pipelines qu'une erreur dure sur les non-motifs, car les appelants peuvent brancher sur is_repeated sans traiter les chaînes uniques ordinaires comme entrée invalide.

Contrat d'entrée, champs de réponse et comportement d'erreur

Exemple : aaaa donne unit a et count quatre. Gardez les entrées sous le plafond de caractères documenté ; les collages trop grands échouent avec un message de limite explicite plutôt qu'une troncature silencieuse. Envoyez en POST un corps JSON avec un champ text obligatoire contenant une chaîne non vide. Les alias input, string, value, s et source sont acceptés afin que formulaires de requête, tableurs et wrappers SDK typés réutilisent le même contrat sans renommer les colonnes. Les nombres finis et les bigints sont d'abord convertis en chaîne, de sorte qu'un code produit saisi comme nombre nu s'analyse proprement ; les booléens, objets simples et tableaux sont rejetés pour qu'un corps JSON erroné ne devienne pas le mot true ni un dump d'objet peu utile. Les chaînes vides et le text manquant échouent avec invalid_input et ne sont pas facturés. En cas de succès le corps inclut text (écho de la chaîne analysée), is_repeated (true lorsque count vaut au moins deux), unit (le plus petit fragment répétitif, ou la chaîne complète lorsqu'elle n'est pas répétée), unit_length, count, length du texte d'origine et method fixé à kmp_period pour les journaux et pipelines multi-outils. Exemple : ababab donne unit ab, unit_length deux, count trois, is_repeated true. Exemple : abc donne unit abc, count un, is_repeated false. Associez l'exécution gratuite dans le navigateur sur cette page à l'API payante lorsque vous avez besoin de la même unité et du même compte dans la CI, des scripts de notation ou des workers de bord sans réimplémenter KMP vous-même.

Où un détecteur de motif répété trouve son utilité

Comme l'implémentation est parse pure de niveau A, chaque appel réussi coûte le prix de base publié $0.002, sans jetons de modèle et sans réseau sortant.

Notation automatique LMS et devoirs

Notez les items de sous-chaîne répétée avec un oracle déterministe qui renvoie unit, count et is_repeated pour une comparaison stable.

Que se passe-t-il si la chaîne n'est pas répétée ?

L'appel réussit tout de même : is_repeated est false, unit égale le texte d'origine et count vaut 1. Seul un text manquant ou vide est invalid_input.

Combien coûte le détecteur de motif de sous-chaîne répétée ?

L'outil navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.

Consulter la documentation complète du KIT →