


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’
Sortie
‘YES’
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’
Sortie
‘No’
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’
Sortie
‘No’
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; }
Sortie
Yes
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; }
Sortie
Yes
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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 :

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

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.

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

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

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

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
