Maison > développement back-end > C++ > Modifier minimalement une chaîne pour que toutes les sous-chaînes soient différentes

Modifier minimalement une chaîne pour que toutes les sous-chaînes soient différentes

王林
Libérer: 2023-09-04 14:49:07
avant
713 Les gens l'ont consulté

Modifier minimalement une chaîne pour que toutes les sous-chaînes soient différentes

Une chaîne est un type spécifique d'objet qui représente la séquence et le flux de caractères de données. Une chaîne est un conteneur de données, toujours représenté au format texte. Il est également utilisé pour les opérations conceptuelles, de comparaison, de fractionnement, de jointure, de remplacement, de découpage, de longueur, d'internalisation, d'égalité, de comparaison et de sous-chaîne. substring() est un processus de raffinement des données qui extrait les données entre les données enregistrées du début à la fin. substring() ne change pas la chaîne d'origine. Dans un ensemble de données, lorsque nous avons différents caractères, ils peuvent être représentés comme différents éléments de données. Par exemple : « a » et « r » sont différents, tandis que « r » et « r » sont identiques. Ainsi, une chaîne de type orange contient 6 caractères différents. De même, la chaîne pomme ne contient que 4 caractères distincts.

Supposons que "s" soit une chaîne et que nous devions trouver le nombre minimum de modifications requises pour toutes les sous-chaînes afin de rendre la chaîne différente.

  • Longueur de la ficelle - 26

  • L'entrée donnée - T est le cas de test de la première ligne, qui est un entier. Pour chaque scénario de test, il n'y aura qu'une seule ligne contenant 26 caractères.

  • Sortie - Nous obtiendrons le nombre minimum de modifications pour chaque cas de test.

  • Contraintes du flux de méthode logique

    • 1

    • 1

Dans l'article d'aujourd'hui, nous allons apprendre comment modifier une chaîne pour que toutes les sous-chaînes soient différentes.

Algorithme pour rendre les sous-chaînes différentes

Il s'agit d'un algorithme possible pour opérer sur une chaîne de telle sorte que toutes les sous-chaînes soient distinctes tout en minimisant les changements.

  • Première étape : commencer.

  • Étape 2 - Utilisez deux boucles imbriquées pour générer des sous-chaînes.

  • Étape 3 - La boucle externe commence à i = 0 et soustrait la longueur de la chaîne de 1.

  • Étape 4 - La boucle intérieure commence à j = 0 et soustrait la longueur de la chaîne de 1.

  • Étape 5 - Construisez une variable de comptage en utilisant la valeur zéro.

  • Étape 6− À l'intérieur de la boucle externe, créez une variable distinct_character.

  • Étape 7 - Créez un tableau de fréquences.

  • Étape 8− Réglez tous les éléments à zéro.

  • Étape 9 - Vérifiez si la fréquence de la chaîne[j] - 'a' est nulle.

  • Étape 10− S'il est nul, augmentez-le de 1.

  • Étape 11− Sinon, divisez-le en une boucle interne.

  • Étape 12 - Si le décompte est supérieur à zéro, renvoyez le décompte.

  • Étape 13 - Sinon, retournez -1.

  • Étape 14 - Résiliation.

Syntaxe pour créer toutes les différentes sous-chaînes

string.substring(start, end)
Copier après la connexion

Dans cette syntaxe, nous pouvons voir comment apporter des modifications minimes à une chaîne de telle sorte que toutes les sous-chaînes soient différentes.

  • Paramètres

    • Départ - Une position de départ doit être déclarée. L'index du premier caractère ici est 0.

    • Fin - Il s'agit d'un processus facultatif situé à la fin (y compris, mais sans s'y limiter).

Méthode

Méthode 1− Recherchez le nombre minimum de modifications qui rendent toutes les sous-chaînes de la chaîne différentes.

Trouvez le nombre minimum de modifications pour que toutes les sous-chaînes d'une chaîne deviennent différentes

Dans cette méthode, nous apprendrons comment rendre toutes les sous-chaînes différentes. Ici, chaque personnage doit être différent. Il suffit de trouver le nombre de caractères. Si la longueur de la chaîne est supérieure à 26, il suffit alors de la convertir en chaîne. Ici, nous écrirons la même logique dans différents paramètres régionaux.

Exemple 1 : Utiliser C++

#include <bits/stdc++.h>
using namespace std;
const int MAX_CHAR = 26;
int minChanges(string &str) {
   int n = str.length();
   if (n > MAX_CHAR)
   return -1;
   int dist_count = 0;
   int count[MAX_CHAR] = {0};
   for (int i = 0; i < n; i++) {
      if (count[str[i] - 'a'] == 0)
      dist_count++;
      count[(str[i] - 'a')]++;
   }
   return (n - dist_count);
}
int main() {
   string str = "aebaecedabbeedee";
   cout << minChanges(str);
   return 0;
}
Copier après la connexion

Sortie

11
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exemple 2 : En utilisant Java

import java.lang.*;
import java.util.*;
public class tutorialspoint {
   static final int MAX_CHAR = 26;
   public static int minChanges(String str) {
      int n = str.length();
      if (n > MAX_CHAR)
      return -1;
      int dist_count = 0;
      int count[] = new int[MAX_CHAR];
      for(int i = 0; i < MAX_CHAR; i++)
      count[i] = 0;
      for (int i = 0; i < n; i++) {
         if(count[str.charAt(i)-'a'] == 0)
         dist_count++;
         count[str.charAt(i)-'a']++;
      }
      return (n-dist_count);
   }
   public static void main (String[] args) {
      String str = "aebaecedabbeedee";
      System.out.println(minChanges(str));
   }
}
Copier après la connexion

Sortie

11
Copier après la connexion
Copier après la connexion
Copier après la connexion

Exemple 1 : Utiliser Python

MAX_CHAR = [26]
def minChanges(str):

	n = len(str )
	if (n > MAX_CHAR[0]):
		return -1
	dist_count = 0
	count = [0] * MAX_CHAR[0]

	for i in range(n):
		if (count[ord(str[i]) - ord('a')] == 0) :
			dist_count += 1
		count[(ord(str[i]) - ord('a'))] += 1
	return (n - dist_count)
if __name__ == '__main__':
	str = "aebaecedabbeedee"
	print(minChanges(str))
	
Copier après la connexion

Sortie

11
Copier après la connexion
Copier après la connexion
Copier après la connexion

Conclusion

Aujourd'hui, dans cet article, nous avons appris à rendre toutes les sous-chaînes différentes avec un minimum de modifications. Ici, nous avons créé quelques codes possibles en suivant l'algorithme décrit en C++, Java et Python. J'espère que cela vous aidera à acquérir une compréhension plus complète du sujet.

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!

Étiquettes associées:
source:tutorialspoint.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal