Maison >développement back-end >C++ >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.
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.
À 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
Retournez c
#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 = 'a' + i; } } return c; } string Rearrangement(string str, int length){ int size = (length + 1) / 2; vector<int> vec(26, 0); string ptr(length, ' '); int temp = 0; for(auto it : str){ vec[it - 'a']++; } char ch = maximum(vec); int total = vec[ch - 'a']; if(total > size){ return ""; } while(total){ ptr[temp] = ch; temp = temp + 2; total--; } vec[ch - 'a'] = 0; for(int i = 0; i < 26; i++){ while (vec[i] > 0){ temp = (temp >= length) ? 1 : temp; ptr[temp] = 'a' + 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; }
Output
Rearrangement of characters in a string such that no two adjacent are same is: initn
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!