Table des matières
Énoncé du problème
Exemple Exemple
Entrez
Sortie
Explication
Méthode 2
Algorithme
Exemple
Conclusion
Maison développement back-end C++ Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire

Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire

Sep 02, 2023 pm 08:09 PM
chaîne binaire échange chaîne palindrome

Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire

Énoncé du problème

Nous avons une chaîne str et une chaîne binaire B. La longueur des deux chaînes est égale à N. Nous devons vérifier si nous pouvons faire de la chaîne str une chaîne palindrome en échangeant ses caractères plusieurs fois sur n'importe quelle paire d'index contenant des caractères inégaux dans la chaîne B.

Exemple Exemple

Entrez

str = ‘AAS’ B = ‘101’
Copier après la connexion

Sortie

‘YES’
Copier après la connexion
La traduction chinoise de

Explication

est :

Explication

Nous pouvons échanger str[1] et str[2] car B[1] et B[2] ne sont pas égaux. La chaîne finale peut être « ASA ».

Entrez

str = ‘AASS’ B = ‘1111’
Copier après la connexion

Sortie

‘No’
Copier après la connexion
Copier après la connexion
La traduction chinoise de

Explication

est :

Explication

Nous ne pouvons pas créer de palindrome de chaîne car la chaîne B ne contient pas de caractères inégaux.

Entrez

str = ‘AASSBV’ B = ‘111100’
Copier après la connexion

Sortie

‘No’
Copier après la connexion
Copier après la connexion
La traduction chinoise de

Explication

est :

Explication

Nous ne pouvons pas faire de la chaîne str un palindrome en raison d'une inadéquation de fréquence de caractères.

Méthode 1

Dans la première méthode, nous vérifierons si une chaîne palindrome peut être créée en utilisant tous les caractères de la chaîne str. Si tel est le cas, nous pouvons vérifier si nous pouvons échanger les caractères dans les paires d'index contenant des caractères inégaux dans la chaîne B et faire de la chaîne un palindrome. Sinon, nous renvoyons false.

Algorithme

  • Étape 1 - Exécutez la fonction utility() et échangez des caractères selon la condition donnée pour déterminer si la chaîne peut devenir un palindrome en échangeant des caractères.

  • Étape 2 - Définissez la fonction canBePalindromic() pour vérifier si nous pouvons construire une chaîne palindrome en utilisant les caractères de str.

  • Étape 2.1 - Créez une carte qui stocke chaque caractère dans la chaîne str et sa fréquence. Utilisez une boucle for pour parcourir la chaîne et compter la fréquence des caractères.

  • Étape 2.2 - Comptez le nombre de caractères avec des fréquences paires et impaires.

  • Étape 2.3 - Utilisez set pour obtenir le nombre total de caractères uniques dans une chaîne.

  • Étape 2.4 - Renvoie vrai si la longueur de la chaîne est impaire et ne contient qu'un seul caractère avec une fréquence impaire.

  • Étape 2.5 - Si la longueur de la chaîne est paire, alors tous les caractères de fréquence paire et 0 caractère de fréquence impaire renvoient vrai.

  • Étape 2.6 − Renvoie faux.

  • Étape 3 - Si la chaîne ne peut pas être un palindrome, renvoyez false.

  • Étape 4 - Si la chaîne B contient plusieurs « 1 » et « 0 », renvoyez vrai, sinon renvoyez faux ;

Exemple

#include <bits/stdc++.h>
using namespace std;
// function to check if the string can be palindromic
bool canBePalindromic(string str){
   //Creating the map to store the frequency of each character
   map<char, int> charMap;
   // store the frequency of each character of string Str
   for (int i = 0; i < str.length(); i++) {
      charMap[str[i]] += 1;
   }
   // to store the count of even and odd frequent characters
   int even = 0, odd = 0;
   // iterate through the map
   for (auto e : charMap)  {
      //If frequency is odd, increment odd count; else, increment even count
      if (e.second % 2 == 1) {
         odd++;
      } else {
         even++;
      }
   }
   // set to store unique characters of string Str
   unordered_set<char> set;
   //Insert all characters of string Str in set
   for (int i = 0; i < str.size(); i++){
      set.insert(str[i]);
   }
   // if the string length is odd and only one character has an odd frequency, return true
   if (str.size() % 2 == 1 && even == set.size() - 1 && odd == 1){
      return true;
   }
   // If the string length is even and all characters have even frequency, return true
   if (str.size() % 2 == 0 && even == set.size() && odd == 0){
      return true;
   }
   // else return false
   return false;
}
// function to check if the string can be palindromic by swapping characters according to string B
bool utility(string S, string B){
   // If string S cannot be palindromic, return false.
   if (canBePalindromic(S) == false){
      return false;
   } else{
      // if at least one '1' and '0' is present in string B, string S can be palindromic
      int one = 0, zero = 0;
      for (int i = 0; i < B.size(); i++) {
         // If the current character is '0.'
         if (B[i] == '0'){
            zero++;
         } else {
            one++;
         }
      }
      // return true if at least one '1' and '0' is present in the string B
      if (one >= 1 && zero >= 1){
         return true;
      } else {
         return false;
      }
   }
}
int main(){
   string S = "NANA";
   string B = "0001";
   bool result = utility(S, B);
   if (result)
      cout << "Yes";
   else
      cout << "No";
   return 0;
}
Copier après la connexion

Sortie

Yes
Copier après la connexion
Copier après la connexion
  • Complexité temporelle - O(NlogN), car nous utilisons une boucle for pour parcourir la chaîne, et la méthode insert() de set prend (logN) du temps.

  • Complexité spatiale - O(K), où K est le nombre total de caractères uniques.

Méthode 2

Dans cette méthode, au lieu d'utiliser une carte, nous utiliserons un tableau pour stocker la fréquence des caractères.

Algorithme

  • Étape 1 - Créez un tableau 'charFrequancy' de longueur 26 et initialisez-le à zéro.

  • Étape 2 - Comptez le nombre total de 1 et de 0 dans la chaîne B.

  • Étape 3 - Mettez à jour la fréquence de chaque caractère du tableau.

  • Étape 4 - Si la longueur de la chaîne est paire et que la fréquence impaire est non nulle, renvoyez false.

  • Étape 5 - Si la longueur de la chaîne est impaire et que la fréquence impaire est supérieure à 1, renvoyez false.

  • Étape 6 - Renvoie vrai si 1 et 0 existent dans la chaîne.

  • Étape 7 - Retournez false.

Exemple

#include <bits/stdc++.h>
using namespace std;
// function to check if the given string can be converted to a palindrome
bool utility(string str, string B){
   // array to store character counts in str
   int charFrequancy[26] = {0};
   int ones = 0, zeros = 0, odd_fre = 0;
   // count ones and zeros
   for (char ch : B) {
      if (ch == '1')
         ones++;
      if (ch == '0')
         zeros++;
   }
   // store counts of characters
   for (char ch : str){
      charFrequancy[ch - 'A']++;
   }
   // check total character with odd frequency
   for (int i = 0; i < 26; i++){
      if (charFrequancy[i] % 2 == 1)
         odd_fre++;
   }
   if (str.length() % 2 == 0 && odd_fre != 0)
      return false;
   if (str.length() % 2 == 1 && odd_fre > 1)
      return false;
   if (ones > 0 && zeros > 0)
      return true;
   return false;
}
int main(){
   string S = "NBCNB";
   string B = "01010";
   if (utility(S, B)){
      cout << "Yes";
   } else {
      cout << "No";
   }
   return 0;
}
Copier après la connexion

Sortie

Yes
Copier après la connexion
Copier après la connexion
  • Complexité temporelle - O(N) car nous utilisons une boucle for pour parcourir la chaîne.

  • Complexité spatiale − O(1) puisque nous utilisons toujours un tableau de longueur 26.

Conclusion

Nous avons appris deux méthodes pour vérifier si une chaîne peut devenir un palindrome en échangeant des caractères en fonction d'une condition donnée. La première méthode utilise des collections et des cartes, tandis que la seconde méthode utilise uniquement des tableaux pour stocker les données. La deuxième méthode est meilleure que la première méthode car la méthode insert() prend un temps O(logn) pour insérer des données dans la collection, alors que le tableau ne prend qu'un temps O(1).

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)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques mois 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 ajouter de l'espace de swap sur Ubuntu 22.04 LTS Comment ajouter de l'espace de swap sur Ubuntu 22.04 LTS Feb 20, 2024 am 11:12 AM

L'espace d'échange joue un rôle important dans les systèmes Linux, en particulier lorsque le système manque de mémoire. Il agit comme un espace de stockage de mémoire de sauvegarde qui aide le système à fonctionner correctement et à maintenir sa stabilité même sous une charge élevée. Cet article vous fournit un guide détaillé pour ajouter de l'espace de swap sur Ubuntu 22.04LTS afin de garantir que les performances de votre système sont optimisées et peuvent gérer diverses charges de travail. Comprendre l'espace d'échange L'espace d'échange fournit une mémoire virtuelle utilisée pour compléter la RAM physique du système. Lorsqu'un système manque de RAM, le noyau échange les données sur le disque pour éviter les pannes de mémoire et les pannes du système. Les systèmes Linux utilisent généralement l'espace de swap pour gérer cette situation. Exécutez simultanément plusieurs applications gourmandes en mémoire pour traiter des fichiers ou des données très volumineux

Programme Python : échangez les positions du premier et du dernier élément dans une matrice entre les colonnes Programme Python : échangez les positions du premier et du dernier élément dans une matrice entre les colonnes Sep 08, 2023 pm 04:29 PM

Une matrice est un tableau bidimensionnel de nombres disposés en lignes et en colonnes. Python n'a aucun type de données pour représenter les matrices, mais nous pouvons utiliser des listes imbriquées ou des tableaux NumPy comme matrices. Consultez les scénarios d’entrée et de sortie suivants pour voir comment permuter les éléments de première et de dernière colonne d’une matrice. Scénario d'entrée-sortie Supposons que nous ayons une matrice 3X3 représentée à l'aide d'une liste de listes. La matrice de sortie sera la matrice résultante de l’échange des premier et dernier éléments de colonne. Matrice d'entrée :[1,3,4][4,5,6][7,8,3]Matrice de sortie :[4,3,1][4,5,6][3,8,7]Considérons un autre Une matrice dont les lignes et les colonnes sont inégales. Matrice d'entrée :

Sous-séquence non croissante la plus longue dans une chaîne binaire Sous-séquence non croissante la plus longue dans une chaîne binaire Sep 07, 2023 pm 11:13 PM

Dans ce problème, nous devons trouver la sous-séquence non croissante la plus longue d’une chaîne donnée. Non croissant signifie que les caractères sont identiques ou classés par ordre décroissant. Étant donné que les chaînes binaires ne contiennent que « 0 » et « 1 », la chaîne résultante doit soit commencer par « 1 » et se terminer par « 0 », soit commencer et se terminer par « 0 » ou « 1 ». Pour résoudre ce problème, nous allons compter le préfixe « 1 » et le suffixe « 0 » à chaque position de la chaîne et trouver la somme maximale du préfixe « 1 » et du suffixe « 0 ». Énoncé du problème - On nous donne une chaîne binaire str. Nous devons trouver la sous-séquence non croissante la plus longue de la chaîne donnée. Exemple Input–str="010100"Output–4 illustre le plus long fichier non récursif

Écrit en C++, trouvez le nombre de permutations uniques d'une chaîne binaire commençant par 1 Écrit en C++, trouvez le nombre de permutations uniques d'une chaîne binaire commençant par 1 Sep 05, 2023 am 09:01 AM

Dans le problème donné, on nous donne une chaîne composée de 0 et 1 ; nous devons trouver le nombre total de toutes les permutations commençant par 1. Puisque la réponse peut être un nombre énorme, nous la prenons modulo 1000000007 et la produisons. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Nous allons résoudre ce problème en appliquant des mathématiques combinatoires et en mettant en place des formules. Méthode de solution Dans cette méthode, nous compterons le nombre de 0 et de 1. Supposons maintenant que n soit le nombre de 1 qui apparaissent dans notre chaîne et que m soit le nombre de 0 qui apparaissent dans notre chaîne.

En PHP, la fonction pack() a pour fonction de convertir les données en chaîne binaire En PHP, la fonction pack() a pour fonction de convertir les données en chaîne binaire Aug 31, 2023 pm 02:05 PM

La fonction pack() regroupe les données dans une chaîne binaire. Syntaxe pack(format,args) Format des paramètres - le format à utiliser. Voici les valeurs possibles - a - chaîne remplie NUL A - chaîne remplie d'espaces h - chaîne hexadécimale, petit quartet en premier H - chaîne hexadécimale, haut quartet en premier c - caractère signé C - caractère non signé s - court signé (toujours 16 bits , ordre des octets machine) S - court non signé (toujours 16 bits, ordre des octets machine) n - court non signé (toujours 16 bits, ordre des octets big endian) v - court non signé (toujours 16 bits, ordre des octets small endian) i - entier signé (dépend de la taille de la machine et de l'ordre des octets) I - Aucun entier signé (en fonction de

Programme C++ pour trouver le nombre de matrices uniques pouvant être générées en échangeant des lignes et des colonnes Programme C++ pour trouver le nombre de matrices uniques pouvant être générées en échangeant des lignes et des colonnes Sep 01, 2023 am 11:53 AM

Supposons que nous ayons une matrice nxn. Chaque élément de la matrice est unique et est un entier compris entre 1 et n2. Nous pouvons désormais effectuer les opérations suivantes en n’importe quel nombre et dans n’importe quel ordre. Nous choisissons deux entiers x et y dans la matrice, où (1≤x

Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire Vérifie si une chaîne peut former une chaîne palindrome en échangeant des paires de caractères au niveau des indices avec des caractères inégaux dans une chaîne binaire Sep 02, 2023 pm 08:09 PM

Énoncé du problème Nous avons une chaîne str et une chaîne binaire B. La longueur des deux chaînes est égale à N. Nous devons vérifier si nous pouvons faire de la chaîne str une chaîne palindrome en échangeant ses caractères plusieurs fois sur n'importe quelle paire d'index contenant des caractères inégaux dans la chaîne B. Exemple Exemple Entrée str='AAS' B='101' Sortie 'YES' La traduction chinoise de Explication est : Explication Nous pouvons échanger str[1] et str[2] car B[1] et B[2] ne sont pas égaux . La chaîne finale peut être « ASA ». Entrée str='AASS' B='1111' et sortie 'No'. La traduction chinoise de l'explication est : Explication que nous ne pouvons pas créer le palindrome de chaîne,

Calculer des chaînes binaires de longueur N qui sont des concaténations répétées de sous-chaînes Calculer des chaînes binaires de longueur N qui sont des concaténations répétées de sous-chaînes Sep 07, 2023 am 10:13 AM

Le but de cet article est d'implémenter un programme permettant de compter le nombre de chaînes binaires de longueur N formées par concaténation répétée d'une sous-chaîne. L'objectif est de déterminer combien de chaînes binaires de longueur N peuvent être créées en concaténant de manière répétée des sous-chaînes individuelles du texte donné, où N est un entier positif. Énoncé du problème Implémentez un programme qui compte le nombre de chaînes binaires de longueur N qui concatènent à plusieurs reprises des sous-chaînes. Exemple Exemple 1 Prenons l'entrée, N = 3 Sortie : 2 La traduction chinoise de l'explication est : Explication La liste suivante répertorie les chaînes binaires réalisables de longueur N = 3, dans lesquelles une sous-chaîne est concaténée de manière répétée. "000":Lasubstr

See all articles