Table des matières
Exemple
Méthode 2
Algorithme
Sortie
Maison développement back-end C++ Programme C++ : trouver la sous-séquence de nombres la plus longue avec la même rotation gauche et droite

Programme C++ : trouver la sous-séquence de nombres la plus longue avec la même rotation gauche et droite

Aug 30, 2023 pm 01:33 PM
数字 le plus long séquence de rotateurs

Programme C++ : trouver la sous-séquence de nombres la plus longue avec la même rotation gauche et droite

Dans ce problème, nous devons trouver la longueur maximale de la sous-séquence avec la même rotation gauche et droite. La rotation à gauche signifie déplacer tous les caractères de la chaîne vers la gauche et déplacer le premier caractère à la fin. La rotation à droite signifie déplacer tous les caractères de chaîne vers la droite et déplacer le dernier caractère au début.

Énoncé du problème – On nous donne une chaîne str contenant des nombres et nous devons trouver une sous-séquence de longueur maximale avec la même rotation gauche et droite.

Exemple

Entrez -str="323232",

Sortie– 6

Explication – La sous-séquence la plus longue avec la même rotation gauche et droite est « 323232 ». Faites-le pivoter vers la gauche jusqu'à « 232323 » et faites-le pivoter vers la droite jusqu'à « 232323 ».

Entrez -str = '00010100'

Sortie– 6

Explication – La sous-séquence la plus longue avec la même rotation gauche et droite est "000000".

Entrez -str = '092312110431010'

Sortie– 6

Explication – Il existe 2 sous-séquences possibles de longueur 6 avec la même rotation gauche et droite. Le premier est « 010101 » et le second est « 101010 ».

Méthode 1

Dans cette méthode, nous trouverons toutes les sous-séquences possibles de la chaîne donnée. Après cela, nous vérifierons si la rotation gauche et droite de la chaîne est la même. Nous utiliserons une méthode récursive pour trouver toutes les sous-séquences possibles.

Algorithme

  • Initialisez la variable globale "maxLen" à zéro pour stocker la longueur de la sous-séquence la plus longue avec la même rotation gauche et droite.

  • Définissez la fonction isRightSameLeft() pour vérifier si les rotations gauche et droite de la chaîne sont les mêmes.

    • Dans la fonction, utilisez la méthode substr() pour faire pivoter la chaîne vers la gauche et la droite.

    La fonction
  • getAllSubSeq() est utilisée pour trouver toutes les sous-séquences possibles d'une chaîne donnée.

  • Définissez le cas de base. Si str est vide, nous obtenons la sous-séquence et exécutons la fonction isRightSameLeft() pour vérifier si la sous-séquence a la même rotation gauche et droite. Si tel est le cas, mettez à jour la valeur de la variable "maxLen" si sa longueur est supérieure à la valeur actuelle de "maxLen".

  • Faites un appel récursif après avoir supprimé le premier caractère de "str" ​​​​et ajouté la chaîne "out".

  • Après avoir supprimé le premier caractère et laissé la chaîne "out" inchangée, effectuez un autre appel de fonction récursif. Dans cet appel récursif, nous excluons le premier caractère de "str".

Exemple

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

// Defining global variable to store the length of the longest subsequence according to the given condition
int maxLen = 0;
//  function to check if the string is the same after the left rotation
bool isRightSameLeft(string str) {
   int len = str.length();
   return str.substr(1, len - 1) + str[0] == str[len - 1] + str.substr(0, len - 1);
}
// function to get all subsequences of a string
void getAllSubSeqs(string str, string out) {
   // If the string is empty, we get the subsequences. Check if its left and right rotation is the same
   if (str.empty()) {
      if (isRightSameLeft(out))
          maxLen = max(maxLen, (int)out.length());
      return;
   }
   // Recursive case remove the first character from str, and add it to the output
   getAllSubSeqs(str.substr(1), out + str[0]);
   // remove the first character from str, and drop it
   if (str.length() > 1)
      getAllSubSeqs(str.substr(1), out);
}
int main() {
   string str = "323232";
   string out = "";
   getAllSubSeqs(str, out);
   cout << "The longest subsequence of str having same left and right rotation is " << maxLen;
   return 0;
}
Copier après la connexion

Sortie

The longest subsequence of str having same left and right rotation is 6
Copier après la connexion
Copier après la connexion

Complexité temporelle - O(N*2N). Ici O(N) pour comparer les rotations gauche et droite et O(2N) pour trouver toutes les sous-séquences possibles.

Complexité spatiale - O(1) puisque nous n'utilisons pas d'espace supplémentaire.

Méthode 2

Ici, nous avons optimisé la méthode ci-dessus. Nous pouvons observer la solution de l’échantillon d’entrée. Les rotations gauche et droite d'une sous-séquence sont identiques uniquement si la sous-séquence contient le même caractère ou contient alternativement deux caractères différents et est de longueur paire.

Algorithme

  • Utilisez deux boucles imbriquées pour combiner deux nombres quelconques.

  • Définissez la variable 'cnt' pour trouver la longueur d'une sous-séquence contenant alternativement deux nombres, et initialisez-la à zéro.

  • Définissez une "première" variable booléenne pour savoir si le caractère suivant doit être le i-ème ou le j-ème caractère.

  • Utilisez une boucle pour parcourir la chaîne.

  • Si first == true et str[k] - '0' == I, alternez la valeur de 'first' et incrémentez 'cnt' de 1.

  • Si first == false et str[k] - '0' == j, alternez à nouveau la valeur de 'first' et incrémentez 'cnt' de 1.

  • Si i et j ne sont pas égaux et que la valeur "cnt" est impaire, décrémentez-la de 1.

  • Si la valeur cnt est supérieure à "res", mettez à jour la valeur de la variable "res".

Exemple

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

int getLongSubSeq(string str) {
   // Store the length of the string
   int len = str.size(), res = 0;
   // Traverse the all possible combination of two digits
   for (int i = 0; i < 10; i++) {
      for (int j = 0; j < 10; j++) {
          // to store the length of an alternating sequence of the current combination
          int cnt = 0;
          // to track the turn of the ith or jth digit
          bool first = true;
          // traverse the string
          for (int k = 0; k < len; k++) {
              // If the current digit is equal to I, and the first is true, increment the count
              if (first == true and str[k] - '0' == i) {
                  first = false;
                  cnt++;
              } else if (first == false and str[k] - '0' == j) {
                  // If the current digit is equal to j, and the first is false, increment the count
                  first = true;
                  cnt++;
              }
          }
          // If the sequence is odd and i and j are different, decrement the count
          if (i != j and cnt % 2 == 1)
              cnt--;
          // Update the answer
          res = max(cnt, res);
       }
   }
   return res;
}
int main() {
   string str = "00010100";
   cout << "The longest subsequence of str having same left and right rotation is " << getLongSubSeq(str);
   return 0;
}
Copier après la connexion

Sortie

The longest subsequence of str having same left and right rotation is 6
Copier après la connexion
Copier après la connexion

Complexité temporelle - O(10*10*N) car nous trouvons des sous-séquences à partir de chaînes contenant des combinaisons de nombres.

Complexité spatiale - O(1) puisque nous n'utilisons pas d'espace dynamique.

Ce tutoriel nous apprend deux méthodes pour trouver la sous-séquence la plus longue contenant la même rotation gauche et droite. La première méthode est la méthode simple qui prend beaucoup de temps et nous ne pouvons pas l'utiliser pour des intrants importants.

La deuxième méthode est optimisée et sa complexité temporelle est presque égale à O(N).

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
3 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 vérifier l'heure à laquelle Xiaohongshu a publié une vidéo ? Quel est le temps nécessaire pour publier une vidéo ? Comment vérifier l'heure à laquelle Xiaohongshu a publié une vidéo ? Quel est le temps nécessaire pour publier une vidéo ? Mar 21, 2024 pm 04:26 PM

En tant que plateforme de partage de style de vie, Xiaohongshu est l'endroit où de plus en plus d'utilisateurs choisissent de publier leur propre contenu vidéo et de partager leur vie quotidienne avec d'autres utilisateurs. De nombreux utilisateurs peuvent rencontrer un problème lors de la publication de vidéos : comment vérifier l'heure à laquelle eux ou d'autres ont publié des vidéos ? 1. Comment vérifier l'heure à laquelle Xiaohongshu a publié une vidéo ? 1. Vérifiez l'heure à laquelle vous avez publié la vidéo. Pour vérifier l'heure à laquelle vous avez publié la vidéo, vous devez d'abord ouvrir l'application Xiaohongshu et vous connecter à votre compte personnel. Au bas de l'interface de la page d'accueil personnelle, il y aura une option marquée "Création". Après avoir cliqué pour entrer, vous verrez une colonne intitulée "Vidéo". Ici, vous pouvez parcourir une liste de toutes les vidéos publiées et vérifier facilement quand elles ont été publiées. Il y a un bouton « Afficher les détails » dans le coin supérieur droit de chaque vidéo.

iOS 17 : Comment changer le style d'horloge de l'iPhone en mode veille iOS 17 : Comment changer le style d'horloge de l'iPhone en mode veille Sep 10, 2023 pm 09:21 PM

La veille est un mode d'écran de verrouillage qui s'active lorsque l'iPhone est branché sur le chargeur et orienté en orientation horizontale (ou paysage). Il se compose de trois écrans différents, dont l'un affiche l'heure en plein écran. Lisez la suite pour savoir comment changer le style de votre horloge. Le troisième écran de StandBy affiche les heures et les dates dans différents thèmes que vous pouvez faire glisser verticalement. Certains thèmes affichent également des informations supplémentaires, comme la température ou la prochaine alarme. Si vous maintenez une horloge enfoncée, vous pouvez basculer entre différents thèmes, notamment numérique, analogique, mondial, solaire et flottant. Float affiche l'heure dans de grands nombres de bulles dans des couleurs personnalisables, Solar a une police plus standard avec un motif d'éruption solaire dans différentes couleurs et World affiche le monde en mettant en surbrillance

Que dois-je faire si mon ordinateur portable ne parvient pas à saisir les chiffres de 1 à 9 ? Que dois-je faire si mon ordinateur portable ne parvient pas à saisir les chiffres de 1 à 9 ? Feb 23, 2023 pm 05:19 PM

L'incapacité de l'ordinateur portable à saisir les chiffres 1 à 9 est due à un problème de configuration. La solution est la suivante : 1. Appuyez sur "win+r" pour ouvrir l'exécution, entrez cmd et appuyez sur Entrée. 2. Dans l'interface d'invite de commande, entrez ; osk et appuyez sur Entrée ; 3. Cliquez sur "Options" sur le clavier virtuel et cochez "Activer le clavier numérique" 4. Activez la "touche de verrouillage numérique".

Générer des nombres et des chaînes aléatoires en JavaScript Générer des nombres et des chaînes aléatoires en JavaScript Sep 02, 2023 am 08:57 AM

La possibilité de générer des nombres aléatoires ou des chaînes alphanumériques s'avère utile dans de nombreuses situations. Vous pouvez l'utiliser pour faire apparaître des ennemis ou de la nourriture à différents endroits du jeu. Vous pouvez également l'utiliser pour suggérer des mots de passe aléatoires aux utilisateurs ou créer des noms de fichiers pour enregistrer des fichiers. J'ai écrit un tutoriel sur la façon de générer des chaînes alphanumériques aléatoires en PHP. J'ai dit au début de cet article que peu d'événements sont véritablement aléatoires, et il en va de même pour la génération de nombres aléatoires ou de chaînes. Dans ce tutoriel, je vais vous montrer comment générer une chaîne alphanumérique pseudo-aléatoire en JavaScript. Générer des nombres aléatoires en JavaScript Commençons par générer des nombres aléatoires. La première méthode qui me vient à l’esprit est Math.random(), qui renvoie un float

Programme C++ pour arrondir un nombre à n décimales Programme C++ pour arrondir un nombre à n décimales Sep 12, 2023 pm 05:13 PM

Représenter des nombres en sortie est une tâche intéressante et importante lors de l’écriture d’un programme dans n’importe quel langage. Pour les types entiers (données de type court, long ou moyen), il est facile de représenter des nombres en sortie. Pour les nombres à virgule flottante (de type flottant ou double), nous devons parfois les arrondir à un nombre spécifique de décimales. Par exemple, si nous voulons représenter 52,24568 sous forme de trois décimales, un prétraitement est nécessaire. Dans cet article, nous présenterons plusieurs techniques pour représenter les nombres à virgule flottante avec un nombre spécifique de décimales par arrondi. Parmi les différentes approches, il est important d'utiliser une chaîne de format de type C, d'utiliser l'argument de précision et d'utiliser la fonction round() de la bibliothèque mathématique. Regardons-les un par un. avec

Utilisez C++ pour écrire du code afin de trouver le Nième nombre non carré Utilisez C++ pour écrire du code afin de trouver le Nième nombre non carré Aug 30, 2023 pm 10:41 PM

Nous connaissons tous des nombres qui ne sont le carré d’aucun nombre, comme 2, 3, 5, 7, 8, etc. Il existe N nombres non carrés et il est impossible de connaître tous les nombres. Ainsi, dans cet article, nous expliquerons tout sur les nombres sans carrés ou non carrés et les moyens de trouver le Nième nombre non carré en C++. Nième nombre non carré Si un nombre est le carré d'un entier, alors ce nombre est appelé un carré parfait. Quelques exemples de nombres carrés parfaits sont -1iscarréde14iscarréde29iscarréde316iscarréde425iscarréde5 Si un nombre n'est le carré d'aucun entier, alors le nombre est appelé non carré. Par exemple, les 15 premiers nombres non carrés sont -2,3,5,6,

Rechercher des nombres qui ne sont divisibles par aucun nombre dans une plage, à l'aide de C++ Rechercher des nombres qui ne sont divisibles par aucun nombre dans une plage, à l'aide de C++ Sep 13, 2023 pm 09:21 PM

Dans cet article, nous aborderons le problème de la recherche de nombres compris entre 1 et n (donnés) qui ne sont divisibles par aucun nombre compris entre 2 et 10. Comprenons cela avec quelques exemples - Entrée : num = 14 Sortie : 3 Explication : Il y a trois nombres, 1, 11 et 13, qui ne sont pas divisibles. Entrée : num = 21 Sortie : 5 Explication : Il y a cinq nombres 1, 11, 13, 17 et 19, qui ne sont pas divisibles. Méthode simple résolue si.

Vérifiez s'il s'agit d'un nombre en utilisant la fonction is_numeric() en PHP Vérifiez s'il s'agit d'un nombre en utilisant la fonction is_numeric() en PHP Jun 27, 2023 pm 05:00 PM

Dans le langage de programmation PHP, la fonction is_numeric() est une fonction très couramment utilisée, utilisée pour déterminer si une variable ou une valeur est un nombre. En programmation réelle, il est souvent nécessaire de vérifier la valeur saisie par l'utilisateur pour déterminer s'il s'agit d'un type numérique. Dans ce cas, la fonction is_numeric() peut être utilisée pour déterminer. 1. Introduction à la fonction is_numeric() La fonction is_numeric() est une fonction utilisée pour détecter si une variable ou une valeur est un nombre. Renvoie tru si la variable ou la valeur est un nombre

See all articles