Nombre de sous-chaînes dans la corde
Mon programme doit effectuer les opérations suivantes:
- Utilisateur entre une chaîne de caractères: Université de la Cordillères
- Utilisateur entre la sous-chaîne: re
- Programme des sorties de la sous-chaîne-nombre: 2 (Université de la Cordillercomme)
Je ne devrais pas utiliser .str, mais de créer ma propre méthode.
- Veuillez clarifier la question. Cela n'a aucun sens.
- Les expressions régulières sont-ils autorisés? Quelles sont les exigences pour la méthode? Et qu'avez-vous déjà trouvé? Ce qui fonctionne? Ce qui ne l'est pas? Devoirs?
- J'ai essayé de réécrire votre question, mais qu'est-ce que
.str
? - Je suppose, il n'est tout simplement pas autorisé à utiliser les méthodes de la
String
classe. Et je suppose que c'est quelque chose comme devoirs à la maison. @Mark - si c'est le cas, veuillez ajouter des "devoirs" à la liste de balises. - C'est ce que je me disais aussi, mais je ne veux pas modifier cette partie sans commentaires de Mark.
- Ajouter les devoirs de la balise?
- "les devoirs de la balise, comme d'autres soi-disant" meta balises, est déconseillé."
Vous devez vous connecter pour publier un commentaire.
L'approche naïve (vérifier le sous-chaîne à chaque indice possible) s'exécute dans O(nk) où n est la longueur de la chaîne et k est la longueur de la sous-chaîne. Cela pourrait être mis en œuvre avec une boucle for, et quelque chose comme
haystack.substring(i).startsWith(needle)
.Algorithmes plus efficaces existent cependant. Vous voudrez peut-être avoir un coup d'oeil à la Knuth-Morris-Pratt algorithme, ou le Aho-Corasick algorithme. Par opposition à l'approche naïve, à la fois de ces algorithmes se comportent aussi bien sur l'entrée regard de la sous-chaîne de 100 'X' dans une chaîne de 10000 'X.
Il suffit de remplacer la première occurrence, et comptez jusqu'à ce qu'il n'y est aucune.
char
valeurs (comme un tableau)true
, incrémenter ton compteur.C'est l'algorithme de base. Si vous avez cela en place et en cours d'exécution, penser à des cas particuliers, comme la Chaîne source est vide ou courte, puis le modèle.
Voici mon Code....
Algorithme:
étape 1: convertir mainstring de tableau de caractères
étape 2: convertir les sous-chaîne de caractères tableau
étape 3: comparer deux tableaux de caractère par caractère
étape 4: Si au moins l'un des caractères de la sous-chaîne de tableau ne correspond avec mainstring tableau de caractères commence à partir du premier caractère de la sous-chaîne, mais continuer à progresser dans la chaîne principale
étape 5: Si tous les caractères de la sous-chaîne obtient assorti incrémenter le compteur et commencer à partir de la première position de la sous-chaîne de nouveau que c'est.
En une seule ligne: