Table des matières
Exemple
Méthode 2
Algorithme
Sortie
Maison développement back-end C++ Vérifie si une permutation d'une chaîne donnée est lexicographiquement supérieure à une autre chaîne donnée

Vérifie si une permutation d'une chaîne donnée est lexicographiquement supérieure à une autre chaîne donnée

Sep 22, 2023 am 08:41 AM
比较 Disposition des cordes Ordre lexicographique

Vérifie si une permutation dune chaîne donnée est lexicographiquement supérieure à une autre chaîne donnée

Nous avons reçu deux chaînes et devons vérifier si une permutation de la chaîne donnée existe afin qu'une permutation puisse avoir des caractères plus grands que l'autre permutation au i-ième index.

Nous pouvons résoudre le problème en triant la chaîne et en comparant chaque caractère de la chaîne un par un. Alternativement, nous pouvons utiliser les fréquences de caractères des deux chaînes pour résoudre le problème.

Énoncé du problème - On nous donne des chaînes str1 et str2 de longueur N. Nous devons vérifier s’il existe des permutations de chaînes telles que l’une soit lexicographiquement plus grande que l’autre. Cela signifie que toute permutation doit avoir un caractère au i-ème index qui est supérieur au caractère au i-ème index d'une autre permutation de chaîne.

Exemple

Entrée - str1 = "aef"; str2 = "fgh";

Sortie–Oui

Explication– « fgh » est déjà plus grand que « aef ». Ici, un > ;

Entrée– str1 = "adsm"; str2 = "obpc";

Sortie–Non

Explication– Nous ne trouvons aucune permutation dans laquelle chaque caractère d'une chaîne est plus grand que l'autre.

Méthode 1

Dans cette méthode, nous trierons deux chaînes par ordre lexicographique. Nous comparerons ensuite chaque caractère de la chaîne. Renvoie vrai si tous les caractères de str1 sont inférieurs à str2 ou si tous les caractères de str2 sont inférieurs à str1. Sinon, retournez false.

Algorithme

  • Utilisez la méthode sort() pour trier les chaînes.

  • Définissez la variable booléenne isStr1Greater et initialisez-la avec true.

  • Traversez la chaîne et si le caractère à la i-ème position d'index dans str1 est inférieur à str2, mettez à jour la valeur de isStr1Greater sur false et utilisez le mot-clé break pour interrompre la boucle

  • Si isStr1Greater est vrai, la boucle se termine avec succès et renvoie vrai.

  • Maintenant, parcourez la chaîne pour vérifier si str2 est supérieur à str1. Si nous constatons qu’un caractère de str1 est supérieur à str2, alors false est renvoyé.

  • Renvoie vrai si la boucle se termine avec succès.

Exemple

#include <algorithm>
#include <iostream>
#include <string>
using namespace std;

bool isAnyPermLarge(string string1, string string2) {
   // sort the strings
   sort(string1.begin(), string1.end());
   sort(string2.begin(), string2.end());
   // to keep track if string1 is greater than string2
   bool isStr1Greater = true;
   // traverse the string
   for (int i = 0; i < string1.length(); i++) {
      // if any character of string1 is less than string2, return false.
      if (string1[i] < string2[i]) {
          isStr1Greater = false;
          break;
      }
   }
   // If string1 is greater, returning true
   if (isStr1Greater)
      return true;
   // traverse the string
   for (int i = 0; i < string2.length(); i++) {
      // if any character of string2 is less than string1, return false.
      if (string1[i] > string2[i]) {
          return false;
      }
   }
   // return true if string2 is greater than string1
   return true;
}
int main() {
   string string1 = "aef";
   string string2 = "fgh";
   bool res = isAnyPermLarge(string1, string2);
   if (res) {
      cout << "Yes, permutation exists such that one string is greater than the other.";
   } else {
      cout << "No, permutation does not exist such that one string is greater than the other.";
   }
   return 0;
}
Copier après la connexion

Sortie

Yes, permutation exists such that one string is greater than the other.
Copier après la connexion
Copier après la connexion

Complexité temporelle - O(N*logN) car nous trions les chaînes.

Complexité spatiale - O(N) est requis pour trier les chaînes.

Méthode 2

Dans cette méthode, nous stockerons la fréquence totale de chaque caractère dans les deux chaînes. Ensuite, nous utiliserons les fréquences cumulées pour décider si nous pouvons trouver des permutations de chaînes telles que l’une soit supérieure à l’autre.

Algorithme

  • Définissez les tableaux map1 et map2 de longueur 26 et initialisez-les à zéro.

  • Stockez la fréquence des caractères dans str1 dans map1 et stockez la fréquence des caractères dans str2 dans map2.

  • Définissez les variables booléennes isStr1 et isStr2 et initialisez-les à false pour savoir si str1 est supérieur à str2.

  • Définissez les variables cnt1 et cnt2 pour stocker la fréquence cumulée des caractères de chaîne.

  • Traverse map1 et map2. Ajoutez map1[i] à cnt1 et map2[i] à cnt2.

  • Si cnt1 est supérieur à cnt2, la fréquence cumulée des caractères de str1 au i-ième index est plus grande. Si tel est le cas et que str2 est déjà plus grand, renvoyez false. Sinon, remplacez isStr1 par true

  • Si cnt2 est supérieur à cnt1, alors la fréquence cumulée du caractère au i-ième index dans str2 est supérieure. Si tel est le cas et que str1 est déjà plus grand, renvoyez false. Sinon, remplacez isStr2 par true

  • Renvoie enfin vrai.

Exemple

#include <iostream>
#include <string>
using namespace std;

bool isAnyPermLarge(string string1, string string2) {
   int map1[26] = {0};
   int map2[26] = {0};
   // store the frequency of each character in the map1
   for (int i = 0; i < string1.length(); i++) {
      map1[string1[i] - 'a']++;
   }
   // store the frequency of each character in the map2
   for (int i = 0; i < string2.length(); i++) {
      map2[string2[i] - 'a']++;
   }
   // To keep track of which string is smaller. Initially, both strings are equal.
   bool isStr1 = false, isStr2 = false;
   // to count the cumulative frequency of characters of both strings
   int cnt1 = 0, cnt2 = 0;
   // traverse for all characters.
   for (int i = 0; i < 26; i++) {
      // update the cumulative frequency of characters
      cnt1 += map1[i];
      cnt2 += map2[i];
      if (cnt1 > cnt2) {
          // If string2 is already greater and cumulative frequency of string1 is greater than string2, then return false
          if (isStr2)
              return false;
          // update isStr1 to true as string1 is smaller
          isStr1 = true;
      }
      if (cnt1 < cnt2) {
          // If string1 is already greater and cumulative frequency of string2 is greater than string1, then return false
          if (isStr1)
              return false;
          // update isStr2 to true as string2 is smaller
          isStr2 = true;
      }
   }
   return true;
}
int main() {
   string string1 = "aef";
   string string2 = "fgh";
   bool res = isAnyPermLarge(string1, string2);
   if (res) {
      cout << "Yes, permutation exists such that one string is greater than the other.";
   } else {
      cout << "No, permutation does not exist such that one string is greater than the other.";
   }
   return 0;
}
Copier après la connexion

Sortie

Yes, permutation exists such that one string is greater than the other.
Copier après la connexion
Copier après la connexion

Complexité temporelle - O(N), puisque nous comptons la fréquence des caractères.

Complexité spatiale - O(26) car nous stockons la fréquence des caractères dans le tableau.

Nous avons appris à vérifier s'il existe une permutation de deux chaînes telle que tous les caractères d'une chaîne peuvent être plus grands que l'autre chaîne. La première méthode utilise une méthode de classement et la seconde méthode utilise la fréquence cumulée des caractères.

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment activer la fonction nfc sur Xiaomi Mi 14 Pro ? Comment activer la fonction nfc sur Xiaomi Mi 14 Pro ? Mar 19, 2024 pm 02:28 PM

De nos jours, les performances et les fonctions des téléphones mobiles deviennent de plus en plus puissantes. Presque tous les téléphones mobiles sont équipés de fonctions NFC pratiques pour faciliter le paiement mobile et l'authentification de l'identité des utilisateurs. Cependant, certains utilisateurs de Xiaomi 14Pro ne savent peut-être pas comment activer la fonction NFC. Ensuite, permettez-moi de vous le présenter en détail. Comment activer la fonction nfc sur Xiaomi 14Pro ? Étape 1 : Ouvrez le menu des paramètres de votre téléphone. Étape 2 : Recherchez et cliquez sur l'option « Connecter et partager » ou « Sans fil et réseaux ». Étape 3 : Dans le menu Connexion et partage ou Sans fil et réseaux, recherchez et cliquez sur « NFC et paiements ». Étape 4 : Recherchez et cliquez sur « NFC Switch ». Généralement, la valeur par défaut est désactivée. Étape 5 : Sur la page du commutateur NFC, cliquez sur le bouton du commutateur pour l'activer.

Comment définir l'espacement des lignes dans WPS Word pour rendre le document plus soigné Comment définir l'espacement des lignes dans WPS Word pour rendre le document plus soigné Mar 20, 2024 pm 04:30 PM

WPS est notre logiciel bureautique couramment utilisé lors de l'édition d'articles longs, les polices sont souvent trop petites pour être clairement visibles, c'est pourquoi les polices et l'ensemble du document sont ajustés. Par exemple : ajuster l'espacement des lignes du document rendra l'ensemble du document très clair. Je suggère à tous les amis d'apprendre cette étape de l'opération. Je la partagerai avec vous aujourd'hui. Les étapes de l'opération spécifiques sont les suivantes, venez jeter un oeil ! Ouvrez le fichier texte WPS que vous souhaitez ajuster, recherchez la barre d'outils de configuration des paragraphes dans le menu [Démarrer] et vous verrez la petite icône de configuration de l'espacement des lignes (représentée par un cercle rouge dans l'image). 2. Cliquez sur le petit triangle inversé dans le coin inférieur droit du paramètre d'espacement des lignes et la valeur d'espacement des lignes correspondante apparaîtra. Vous pouvez choisir 1 à 3 fois l'espacement des lignes (comme indiqué par la flèche sur la figure). 3. Ou cliquez avec le bouton droit sur le paragraphe et il apparaîtra.

Comment utiliser TikTok sur Huawei Pocket2 à distance ? Comment utiliser TikTok sur Huawei Pocket2 à distance ? Mar 18, 2024 pm 03:00 PM

Faire glisser l'écran dans les airs est une fonctionnalité de Huawei très appréciée dans la série Huawei mate60. Cette fonctionnalité utilise le capteur laser du téléphone et la caméra de profondeur 3D de la caméra frontale pour compléter une série de fonctions qui ne nécessitent pas de fonction. fonction de toucher l'écran, comme faire glisser TikTok depuis les airs, mais comment utiliser le Huawei Pocket 2 pour faire glisser TikTok depuis les airs ? Comment faire des captures d'écran depuis les airs avec Huawei Pocket2 ? 1. Ouvrez les paramètres de Huawei Pocket2. 2. Sélectionnez ensuite [Accessibilité]. 3. Cliquez pour ouvrir [Perception intelligente]. 4. Activez simplement les commutateurs [Air Swipe Screen], [Air Screenshot] et [Air Press]. 5. Lorsque vous l'utilisez, vous devez le tenir à 20 ~ 40 cm de l'écran, ouvrir votre paume et attendre que l'icône de la paume apparaisse sur l'écran.

Les dessins CAO de l'iPhone 16 Pro exposés, ajoutant un deuxième nouveau bouton Les dessins CAO de l'iPhone 16 Pro exposés, ajoutant un deuxième nouveau bouton Mar 09, 2024 pm 09:07 PM

Les fichiers CAO de l'iPhone 16 Pro ont été exposés et la conception est conforme aux rumeurs précédentes. L'automne dernier, l'iPhone 15 Pro a ajouté un bouton d'action, et cet automne, Apple semble prévoir d'apporter des ajustements mineurs à la taille du matériel. Ajout d'un bouton Capture Selon les rumeurs, l'iPhone 16 Pro pourrait ajouter un deuxième nouveau bouton, ce qui sera la deuxième année consécutive à ajouter un nouveau bouton après l'année dernière. La rumeur veut que le nouveau bouton Capture soit placé sur le côté inférieur droit de l'iPhone 16 Pro. Cette conception devrait rendre le contrôle de l'appareil photo plus pratique et permettre également d'utiliser le bouton Action pour d'autres fonctions. Ce bouton ne sera plus un simple déclencheur ordinaire. Concernant la caméra, à partir de l'iP actuelle

Comment changer de langue dans les équipes Microsoft Comment changer de langue dans les équipes Microsoft Feb 23, 2024 pm 09:00 PM

Il existe de nombreuses langues parmi lesquelles choisir dans Microsoft Teams, alors comment changer de langue ? Les utilisateurs doivent cliquer sur le menu, puis rechercher Paramètres, y sélectionner Général, puis cliquer sur Langue, sélectionner la langue et l'enregistrer. Cette introduction aux méthodes de changement de langue peut vous indiquer le contenu spécifique. Ce qui suit est une introduction détaillée. Bar! Comment changer de langue dans Microsoft Teams Réponse : Sélectionnez le processus spécifique dans Paramètres-Général-Langue : 1. Tout d'abord, cliquez sur les trois points à côté de l'avatar pour entrer les paramètres. 2. Cliquez ensuite sur les options générales à l'intérieur. 3. Cliquez ensuite sur la langue et faites défiler vers le bas pour voir plus de langues. 4. Enfin, cliquez sur Enregistrer et redémarrer.

Comment définir une sonnerie personnalisée pour Redmi K70E ? Comment définir une sonnerie personnalisée pour Redmi K70E ? Feb 24, 2024 am 10:00 AM

Le Redmi K70E est sans aucun doute excellent. En tant que téléphone mobile avec un prix d'un peu plus de 2 000 yuans, le Redmi K70E peut être considéré comme l'un des téléphones mobiles les plus économiques de sa catégorie. De nombreux utilisateurs à la recherche de rentabilité ont acheté ce téléphone pour profiter de diverses fonctions sur le Redmi K70E. Alors comment définir une sonnerie personnalisée pour Redmi K70E ? Comment définir une sonnerie personnalisée pour Redmi K70E ? Pour définir une sonnerie d'appel entrant personnalisée pour Redmi K70E, vous pouvez suivre les étapes ci-dessous : Ouvrez l'application des paramètres de votre téléphone, recherchez l'option "Sons et vibrations" ou "Son" dans l'application des paramètres, puis cliquez sur "Sonnerie d'appel entrant". ou "Sonnerie du téléphone" ". Dans les paramètres de sonnerie

La différence et analyse comparative entre le langage C et PHP La différence et analyse comparative entre le langage C et PHP Mar 20, 2024 am 08:54 AM

Différences et analyse comparative du langage C et de PHP Le langage C et PHP sont tous deux des langages de programmation courants, mais ils présentent des différences évidentes sur de nombreux aspects. Cet article procédera à une analyse comparative du langage C et de PHP et illustrera les différences entre eux à travers des exemples de code spécifiques. 1. Syntaxe et utilisation : Langage C : Le langage C est un langage de programmation orienté processus, principalement utilisé pour la programmation au niveau système et le développement embarqué. La syntaxe du langage C est relativement simple et de bas niveau, peut exploiter directement la mémoire, et est efficace et flexible. Le langage C met l'accent sur l'exhaustivité du programme pour le programmeur

Comparaison et analyse des avantages et inconvénients des versions PHP7.2 et 5 Comparaison et analyse des avantages et inconvénients des versions PHP7.2 et 5 Feb 27, 2024 am 10:51 AM

Comparaison et analyse des avantages et des inconvénients de PHP7.2 et 5. PHP est un langage de script côté serveur extrêmement populaire et largement utilisé dans le développement Web. Cependant, PHP est constamment mis à jour et amélioré dans différentes versions pour répondre à l'évolution des besoins. Actuellement, PHP7.2 est la dernière version, qui présente de nombreuses différences et améliorations notables par rapport à la version précédente de PHP5. Dans cet article, nous comparerons les versions PHP7.2 et PHP5, analyserons leurs avantages et inconvénients et fournirons des exemples de code spécifiques. 1. PH des performances

See all articles