


La sous-séquence la plus longue dont les caractères sont les mêmes que la sous-chaîne et dont la différence de fréquence est d'au plus K
Dans ce problème, nous trouverons la longueur maximale de la sous-séquence telle qu'elle contienne des caractères consécutifs et que la différence de fréquence de tous les caractères ne dépasse pas K.
Nous devons trouver toutes les sous-séquences possibles d'une chaîne donnée et vérifier si elle contient chaque caractère consécutivement et avec une différence de fréquence maximale pour obtenir le résultat.
Énoncé du problème- Nous recevons une chaîne alpha contenant des caractères alphabétiques minuscules. De plus, on nous a donné un entier positif K. Nous devons trouver la longueur maximale d’une sous-séquence d’une chaîne donnée telle qu’elle suive les règles suivantes.
Toutes les occurrences d'un caractère spécifique doivent être consécutives.
La différence de fréquence des caractères ne peut pas être supérieure à K.
Exemple
Entrez
alpha = "ppppqrs", K = 2
Sortie
6
Explication - On peut prendre la sous-séquence "pppqrs". La fréquence maximale des caractères est de 3 et la fréquence minimale des caractères est de 1. La différence est donc de 2. Et il contient tous les caractères consécutivement.
Entrez
alpha = "abbbbc", K = 2
Sortie
5
Explication - On peut prendre la sous-séquence "abbbc".
Entrez
alpha = "mnnnnnnno", k = 3;
Sortie
7
Explication - On peut prendre la sous-séquence "nnnnnnn".
Méthode 1
Dans cette méthode, nous utiliserons une fonction récursive pour trouver toutes les sous-séquences d'une longueur donnée. De plus, nous définirons des fonctions pour vérifier si une sous-séquence contient tous les caractères consécutivement. Nous utiliserons la structure des données cartographiques pour calculer les différences de fréquence maximales et minimales.
Algorithme
Étape 1 - Définissez la carte "f" pour stocker la fréquence des caractères.
Étape 2 - Si start est égal à la longueur de la chaîne temporaire et que la longueur de la chaîne est supérieure à 0, suivez ces étapes.
Étape 3 - Initialisez les variables "minf" et "maxf" pour stocker les fréquences minimales et maximales.
Étape 4- Effacez la carte et stockez la fréquence de chaque personnage dans la carte.
Étape 5 - Parcourez les valeurs de la carte et recherchez les valeurs de fréquence maximale et minimale.
Étape 6 - Si la différence de fréquence maximale et minimale est inférieure ou égale à K, vérifiez si la chaîne contient des caractères consécutifs.
Étape 6.1 - Dans la fonction checkForContinously(), définissez la carte "pos" pour stocker la dernière position d'un caractère spécifique.
Étape 6.2 - Faites une boucle sur la ficelle. Si le caractère actuel existe dans la carte et que la différence entre la position actuelle du personnage et sa dernière position est inférieure à 1, mettez à jour la dernière position. Sinon, renvoie faux.
Étape 6.3 - Ajoutez le personnage à la carte s'il n'existe pas.
Étape 6.4 - Enfin, retournez vrai.
Étape 7 - Si la chaîne contient des caractères consécutifs et que la différence de fréquence est inférieure à K, mettez à jour la valeur de 'maxi' si la valeur de 'maxi' est inférieure à la longueur de la sous-séquence actuelle. p>
Étape 8 - Effectuez un appel récursif après avoir exclu le personnage actuel.
Étape 9 - Ajoutez le caractère actuel à la fin de la chaîne temporaire. Effectuez également un appel récursif avec la chaîne "tmp" mise à jour.
Exemple
#include <bits/stdc++.h> using namespace std; int maxi = 0; // Check for continuous characters in the substring bool CheckForContinuous(string &tmp) { // map to store the last index of the character unordered_map<char, int> pos; for (int p = 0; p < tmp.length(); p++) { // When the last index exists in the map if (pos[tmp[p]]) { // If the last index is adjacent to the current index if (p - pos[tmp[p]] + 1 <= 1) pos[tmp[p]] = p + 1; else return false; } else { // When the map doesn't have a character as a key pos[tmp[p]] = p + 1; } } return true; } void getLongestSubSeq(string &alpha, string tmp, int start, int &k) { // To store the character's frequency unordered_map<char, int> f; if (start == alpha.length()) { if (tmp.length() > 0) { // To store minimum and maximum frequency of characters int minf = INT_MAX, maxf = INT_MIN; // Make map empty f.clear(); // Store frequency of characters in the map for (int p = 0; p < tmp.length(); p++) f[tmp[p]]++; // Get minimum and maximum value from the map for (auto &key : f) { minf = min(minf, key.second); maxf = max(maxf, key.second); } // Validate substring for frequency difference and continuous characters if (maxf - minf <= k && CheckForContinuous(tmp)) maxi = max(maxi, (int)tmp.length()); } return; } // Exclude current character getLongestSubSeq(alpha, tmp, start + 1, k); // Include current character tmp.push_back(alpha[start]); getLongestSubSeq(alpha, tmp, start + 1, k); } int main() { string alpha = "ppppqrs", tmp; int k = 2; getLongestSubSeq(alpha, tmp, 0, k); cout <<"The maximum length of the substring according to the given conditions is " << maxi; return 0; }
Sortie
The maximum length of the substring according to the given conditions is 6
Complexité temporelle - O(N*2N), où O(N) pour vérifier les caractères consécutifs et O(2N) pour trouver toutes les sous-séquences.
Complexité spatiale - O(N) pour stocker la sous-séquence temporaire.
Nous utilisons une méthode simple pour trouver toutes les sous-séquences d'une chaîne donnée. Cependant, cela prend beaucoup de temps. Il n'est pas recommandé d'utiliser cette méthode pour résoudre le problème des grandes chaînes.
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)

La mémoire est l’un des composants les plus importants de l’ordinateur et elle a un impact significatif sur les performances et la stabilité de l’ordinateur. Lors du choix de la mémoire, les gens ont tendance à se concentrer sur deux paramètres importants, à savoir le timing et la fréquence. Alors, pour les performances de la mémoire, qu’est-ce qui est le plus important : le timing ou la fréquence ? Tout d’abord, comprenons les concepts de timing et de fréquence. La synchronisation fait référence à l'intervalle de temps requis par une puce mémoire pour recevoir et traiter les données. Elle est généralement représentée par une valeur CL (CASLatency). Plus la valeur CL est petite, plus la vitesse de traitement de la mémoire est rapide. La fréquence est dans

Utilisez la fonction Character.isDigit() de Java pour déterminer si un caractère est un caractère numérique. Les caractères sont représentés sous la forme de codes ASCII en interne dans l'ordinateur. Chaque caractère a un code ASCII correspondant. Parmi eux, les valeurs du code ASCII correspondant aux caractères numériques 0 à 9 sont respectivement 48 à 57. Pour déterminer si un caractère est un nombre, vous pouvez utiliser la méthode isDigit() fournie par la classe Character en Java. La méthode isDigit() est de la classe Character

Comment utiliser la correction automatique pour saisir des flèches dans Word L'un des moyens les plus rapides de saisir des flèches dans Word consiste à utiliser les raccourcis de correction automatique prédéfinis. Si vous tapez une séquence spécifique de caractères, Word convertit automatiquement ces caractères en symboles fléchés. Vous pouvez dessiner de nombreux styles de flèches différents en utilisant cette méthode. Pour taper une flèche dans Word à l'aide de la correction automatique : Déplacez votre curseur vers l'emplacement du document où vous souhaitez que la flèche apparaisse. Tapez l'une des combinaisons de caractères suivantes : Si vous ne souhaitez pas que ce que vous tapez soit remplacé par un symbole de flèche, appuyez sur la touche Retour arrière de votre clavier pour

Un exposant est un ou plusieurs caractères, lettres ou chiffres, que vous devez définir légèrement au-dessus de la ligne normale de texte. Par exemple, si vous devez écrire 1er, la lettre st doit être légèrement plus haute que le caractère 1. De même, un indice est un groupe de caractères ou un caractère unique et doit être défini légèrement à un niveau inférieur au niveau de texte normal. Par exemple, lorsque vous écrivez une formule chimique, vous devez placer les nombres sous la ligne normale de caractères. Les captures d'écran suivantes montrent quelques exemples de formatage en exposant et en indice. Même si cela peut sembler une tâche ardue, appliquer le formatage en exposant et en indice à votre texte est en réalité assez simple. Dans cet article, nous expliquerons en quelques étapes simples comment formater facilement du texte en exposant ou en indice. J'espère que vous avez apprécié la lecture de cet article. Comment appliquer l'exposant dans Excel

Votre clavier physique ou numérique offre un nombre limité d'options de caractères en surface. Cependant, il existe plusieurs façons d'accéder aux lettres accentuées, aux caractères spéciaux et bien plus encore sur iPhone, iPad et Mac. Le clavier iOS standard vous donne un accès rapide aux lettres majuscules et minuscules, aux chiffres standard, à la ponctuation et aux caractères. Bien sûr, il existe de nombreux autres personnages. Vous pouvez choisir entre des lettres avec des signes diacritiques et des points d'interrogation à l'envers. Vous êtes peut-être tombé sur un caractère spécial caché. Sinon, voici comment y accéder sur iPhone, iPad et Mac. Comment accéder aux caractères étendus sur iPhone et iPad Obtenir des caractères étendus sur votre iPhone ou iPad est très simple. Dans "Informations", "

Afficher correctement les caractères chinois dans matplotlib est un problème souvent rencontré par de nombreux utilisateurs chinois. Par défaut, matplotlib utilise des polices anglaises et ne peut pas afficher correctement les caractères chinois. Pour résoudre ce problème, nous devons définir la police chinoise correcte et l'appliquer à matplotlib. Vous trouverez ci-dessous quelques exemples de code spécifiques pour vous aider à afficher correctement les caractères chinois dans matplotlib. Tout d’abord, nous devons importer les bibliothèques requises : importmatplot

ASUS tufz790plus prend en charge la fréquence de mémoire. La carte mère ASUS TUFZ790-PLUS est une carte mère hautes performances qui prend en charge la mémoire DDR4 double canal et prend en charge jusqu'à 64 Go de mémoire. Sa fréquence mémoire est très puissante, jusqu'à 4800MHz. Les fréquences de mémoire spécifiques prises en charge incluent 2 133 MHz, 2 400 MHz, 2 666 MHz, 2 800 MHz, 3 000 MHz, 3 200 MHz, 3 600 MHz, 3 733 MHz, 3 866 MHz, 4 000 MHz, 4 133 MHz, 4 266 MHz, 4 400 MHz, 4 533 MHz, 4 600 MHz, 4 733 MHz et . Qu'il s'agisse d'un usage quotidien ou de besoins de haute performance

Le plus grand impact des clés mémoire DDR4 sur les ordinateurs est la fréquence, et de nombreux utilisateurs ne savent pas comment vérifier la fréquence. En fait, vous pouvez la vérifier via le logiciel du processeur, et tous les aspects des informations sont affichés de manière très détaillée. Comment vérifier la fréquence du DDR4 : 1. Vous devez d'abord la vérifier via le logiciel. Vous pouvez utiliser CPU-z pour la vérifier. 2. Une fois terminé, ouvrez-le et cliquez sur « Mémoire ». 3. À ce moment, vous pouvez voir la « fréquence » ci-dessous.
