Maison > développement back-end > C++ > le corps du texte

Réorganiser les caractères dans une chaîne de sorte que deux caractères adjacents soient différents, implémenté en C++

WBOY
Libérer: 2023-08-26 22:37:19
avant
736 Les gens l'ont consulté

Réorganiser les caractères dans une chaîne de sorte que deux caractères adjacents soient différents, implémenté en C++

On nous donne une chaîne, en supposant qu'elle soit str, la longueur peut être n'importe quelle valeur. La tâche consiste à réorganiser la chaîne donnée afin que les caractères adjacents identiques ne s'alignent pas ensemble dans la chaîne résultante.

Regardons différents scénarios d'entrée et de sortie :

Input − String str = "itinn"

Output − Réorganisez les caractères de la chaîne de manière à ce que deux caractères adjacents ne soient pas identiques, le résultat pour : initial.

Explication − On nous donne une variable de type chaîne, en supposant qu'elle soit str. Nous allons maintenant réorganiser les caractères de la chaîne d'entrée afin qu'aucun caractère identique n'apparaisse à la même position, c'est-à-dire déplacer 'nn' vers une position non adjacente. Le résultat final est donc La chaîne sera « initn ». une variable de type chaîne, en supposant qu'il s'agit d'une chaîne. Nous allons maintenant réorganiser les caractères de la chaîne d'entrée afin qu'aucun caractère identique n'apparaisse dans la même position, c'est-à-dire déplacer 'bb', 'aa', 'bb', 'aa' puisqu'ils sont identiques et adjacents. La chaîne finale sera donc « ababababa ».

La méthode utilisée dans le programme ci-dessous est la suivante

Entrez une variable de type chaîne, en supposant qu'elle soit str, calculez la taille de la chaîne et stockez-la dans une variable nommée longueur.

Vérifiez si la longueur est 0, puis revenez.

Passez les données à la fonction Rearrangement(str, length).

  • À l'intérieur de la fonction Réarrangement(arr, longueur)

  • définit la taille de la chaîne à (longueur + 1)/2.

  • Déclarez une variable de type vectoriel vec(26, 0), qui stockera les données de type entier, et un pointeur de type chaîne ptr(length, ‘ ‘). Déclarez également une variable temporaire temp, de type entier et de valeur 0.

  • Démarrez la boucle FOR pour itérer str. Dans la boucle, définissez vec[it - 'a']++.

    • Créez une variable de type caractère ch et définissez-la sur le résultat de l'appel de la fonction maximum(vec).

    • Déclarez un total variable de type entier et définissez-le sur vec[ch - 'a'].

    • Vérifiez si le total est supérieur à la taille, puis retournez.

    • Démarrez la boucle WHILE total, puis réglez ptr[temp] sur ch, réglez temp sur temp + 2 et décrémentez le total de 1.

    • Réglez vec[ch - 'a'] sur 0. Commencez à boucler FOR de i à 0 jusqu'à ce que i soit inférieur à 26. À l'intérieur de la boucle, démarrez la boucle while, lorsque vec[i] est supérieur à 0, définissez temp sur (temp >= length) ? : temp, définissez ptr[temp] sur 'a' + i, définissez temp sur temp. + 2, et décrémenter vec[i] de 1.

    • Return ptr

    • À l'intérieur de la fonction char maximum(const vector& vec)
    • déclare une variable de type entier high et la définit sur 0, et une variable de type caractère c.
    • Commencez à boucler FOR de i à 0 jusqu'à ce que i soit inférieur à 26. À l'intérieur de la boucle, vérifiez si vec[i] est inférieur à high, puis définissez high sur vec[i] et c sur 'a' + i.
  • Retournez c

    • pour imprimer les résultats.
    • Exemple
    • #include <bits/stdc++.h>
      using namespace std;
      char maximum(const vector<int>& vec){
         int high = 0;
         char c;
         for(int i = 0; i < 26; i++){
            if(vec[i] > high){
               high = vec[i];
               c = &#39;a&#39; + i;
            }
         }
         return c;
      }
      string Rearrangement(string str, int length){
         int size = (length + 1) / 2;
         vector<int> vec(26, 0);
         string ptr(length, &#39; &#39;);
         int temp = 0;
         for(auto it : str){
            vec[it - &#39;a&#39;]++;
         }
         char ch = maximum(vec);
         int total = vec[ch - &#39;a&#39;];
         if(total > size){
            return "";
         }
         while(total){
            ptr[temp] = ch;
            temp = temp + 2;
            total--;
         }
         vec[ch - &#39;a&#39;] = 0;
         for(int i = 0; i < 26; i++){
            while (vec[i] > 0){
               temp = (temp >= length) ? 1 : temp;
               ptr[temp] = &#39;a&#39; + i;
               temp = temp + 2;
               vec[i]--;
            }
         }
         return ptr;
      }
      int main(){
         string str = "itinn";
         int length = str.length();
         if(length == 0){
            cout<<"Please enter a valid string";
         }
         string count = Rearrangement(str, length);
         if(count == ""){
            cout<<"Please enter a valid string";
         }
         else{
            cout<<"Rearrangement of characters in a string such that no two adjacent are same is: "<<count;
         }
         return 0;
      }
      Copier après la connexion

      Output

    • Si nous exécutons le code ci-dessus, la sortie suivante sera générée
    Rearrangement of characters in a string such that no two adjacent are same is: initn
    Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!