Maison  >  Article  >  développement back-end  >  Réorganiser une chaîne pour maximiser la distance minimale entre n'importe quelle paire de voyelles

Réorganiser une chaîne pour maximiser la distance minimale entre n'importe quelle paire de voyelles

王林
王林avant
2023-09-11 19:49:031129parcourir

Réorganiser une chaîne pour maximiser la distance minimale entre nimporte quelle paire de voyelles

Dans cet article, nous allons résoudre un problème intéressant dans le domaine de la manipulation des chaînes : "Réorganiser les chaînes pour maximiser la distance minimale entre n'importe quelle paire de voyelles". Ce problème nous met au défi de manipuler la disposition des caractères dans une chaîne pour garantir la distance minimale la plus grande possible entre deux caractères de voyelle. Nous discuterons de ce problème en détail, fournirons une implémentation du code C++ et illustrerons avec des exemples.

Comprendre l'énoncé du problème

Étant donné une chaîne, la tâche consiste à réorganiser les caractères de la chaîne afin que la distance minimale entre n'importe quelle paire de voyelles soit maximisée. En d’autres termes, nous voulons que les voyelles soient aussi éloignées que possible les unes des autres.

Les voyelles en anglais sont "a", "e", "i", "o", "u" et leurs versions majuscules.

Méthode

Pour résoudre ce problème, nous adopterons une approche en deux étapes -

Tout d’abord, comptez le nombre de voyelles dans la chaîne et stockez leurs positions dans un tableau.

Ensuite, triez le tableau et calculez la différence maximale entre deux éléments consécutifs. Cette différence représente la distance maximale et minimale entre n'importe quelle paire de voyelles.

Exemple

Mettons en œuvre cette stratégie en C++ -

#include <bits/stdc++.h>
using namespace std;

// Function to check if a character is a vowel
bool isVowel(char c) {
   return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
      c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U';
}

// Function to find maximum minimum distance between vowels
int maxMinDist(string s) {
   vector<int> pos;
   for (int i = 0; i < s.size(); i++) {
      if (isVowel(s[i])) pos.push_back(i);
   }
   sort(pos.begin(), pos.end());
   int maxDist = 0;
   for (int i = 1; i < pos.size(); i++) {
      maxDist = max(maxDist, pos[i] - pos[i-1]);
   }
   return maxDist;
}

int main() {
   string s = "programming";
   cout << "Max minimum distance between vowels: " << maxMinDist(s);
   return 0;
}

Sortie

Max minimum distance between vowels: 3

Ce code trouve d'abord les positions de toutes les voyelles dans la chaîne et les stocke dans un vecteur. Ensuite, il trie ce vecteur et trouve la différence maximale entre les éléments consécutifs. Cette différence représente la distance maximale et minimale entre n'importe quelle paire de voyelles.

Cas de test

Considérons la chaîne « programmation ». Les positions des voyelles « o », « a » et « i » sont respectivement 1, 4 et 7. Par conséquent, la distance maximale et minimale entre n’importe quelle paire de voyelles est de 3.

Conclusion

Cet article propose une approche étape par étape du problème de la maximisation de la distance minimale entre n'importe quelle paire de voyelles dans une chaîne donnée. La solution consiste à compter les voyelles, à stocker leurs positions, puis à trouver la différence maximale entre ces positions. Bien que le problème puisse paraître complexe à première vue, il est grandement simplifié lorsqu’il est décomposé en étapes.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer