Inhaltsverzeichnis
Problemstellung
Beispiel Beispiel
Eintreten
Ausgabe
Erklärung
Methode 2
Algorithmus
Beispiel
Fazit
Heim Backend-Entwicklung C++ Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann

Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann

Sep 02, 2023 pm 08:09 PM
二进制字符串 交换 Palindrom-Zeichenfolge

Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann

Problemstellung

Wir haben einen String str und einen binären String B. Die Länge beider Saiten ist gleich N. Wir müssen prüfen, ob wir String str zu einem Palindrom-String machen können, indem wir seine Zeichen mehrmals auf jedem Indexpaar austauschen, das ungleiche Zeichen in String B enthält.

Beispiel Beispiel

Eintreten

1

str = ‘AAS’ B = ‘101’

Nach dem Login kopieren

Ausgabe

1

‘YES’

Nach dem Login kopieren
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

Wir können str[1] und str[2] vertauschen, weil B[1] und B[2] nicht gleich sind. Die letzte Zeichenfolge kann „ASA“ sein.

Eintreten

1

str = ‘AASS’ B = ‘1111’

Nach dem Login kopieren

Ausgabe

1

‘No’

Nach dem Login kopieren
Nach dem Login kopieren
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

Wir können die Zeichenfolge nicht palindromisieren, da Zeichenfolge B keine ungleichen Zeichen enthält.

Eintreten

1

str = ‘AASSBV’ B = ‘111100’

Nach dem Login kopieren

Ausgabe

1

‘No’

Nach dem Login kopieren
Nach dem Login kopieren
Die chinesische Übersetzung von

Erklärung

lautet:

Erklärung

Wir können die Zeichenfolge str nicht in ein Palindrom umwandeln, da die Zeichenhäufigkeit nicht übereinstimmt.

Methode 1

Bei der ersten Methode prüfen wir, ob eine Palindrom-Zeichenfolge mit allen Zeichen der Zeichenfolge str erstellt werden kann. Wenn ja, können wir prüfen, ob wir die Zeichen in den Indexpaaren mit ungleichen Zeichen in Zeichenfolge B austauschen und die Zeichenfolge in ein Palindrom umwandeln können. Andernfalls geben wir false zurück.

Algorithmus

  • Schritt 1 – Führen Sie die Funktion „utility()“ aus und tauschen Sie Zeichen gemäß der angegebenen Bedingung aus, um festzustellen, ob die Zeichenfolge durch den Austausch von Zeichen zu einem Palindrom werden kann.

  • Schritt 2 – Definieren Sie die Funktion canBePalindromic(), um zu prüfen, ob wir mit den Zeichen von str eine beliebige Palindromzeichenfolge erstellen können.

  • Schritt 2.1 − Erstellen Sie eine Karte, die jedes Zeichen in der Zeichenfolge str und seine Häufigkeit speichert. Verwenden Sie eine for-Schleife, um die Zeichenfolge zu durchlaufen und die Häufigkeit der Zeichen zu zählen.

  • Schritt 2.2 – Zählen Sie die Anzahl der Zeichen mit gerader und ungerader Häufigkeit.

  • Schritt 2.3 – Verwenden Sie set, um die Gesamtzahl der eindeutigen Zeichen in einer Zeichenfolge zu ermitteln.

  • Schritt 2.4 - Geben Sie true zurück, wenn die Zeichenfolgenlänge ungerade ist und nur ein Zeichen mit ungerader Häufigkeit enthält.

  • Schritt 2.5 − Wenn die Zeichenfolgenlänge gerade ist, geben alle Zeichen mit gerader Häufigkeit und 0 Zeichen mit ungerader Häufigkeit „true“ zurück.

  • Schritt 2.6 − Geben Sie false zurück.

  • Schritt 3 – Wenn die Zeichenfolge kein Palindrom sein kann, geben Sie false zurück.

  • Schritt 4 – Wenn Zeichenfolge B mehrere „1“ und „0“ enthält, geben Sie true zurück, andernfalls geben Sie false zurück.

Beispiel

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

#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;

}

Nach dem Login kopieren

Ausgabe

1

Yes

Nach dem Login kopieren
Nach dem Login kopieren
  • Zeitkomplexität - O(NlogN), weil wir eine for-Schleife verwenden, um die Zeichenfolge zu durchlaufen, und die insert()-Methode von set (logN) Zeit benötigt.

  • Raumkomplexität – O(K), wobei K die Gesamtzahl der eindeutigen Zeichen ist.

Methode 2

Bei dieser Methode verwenden wir anstelle einer Karte ein Array, um die Häufigkeit von Zeichen zu speichern.

Algorithmus

  • Schritt 1 – Erstellen Sie ein „charFrequancy“-Array mit der Länge 26 und initialisieren Sie es auf Null.

  • Schritt 2 – Zählen Sie die Gesamtzahl der Einsen und Nullen in Zeichenfolge B.

  • Schritt 3 – Aktualisieren Sie die Häufigkeit jedes Zeichens im Array.

  • Schritt 4 – Wenn die Stringlänge gerade und die ungerade Häufigkeit ungleich Null ist, geben Sie „false“ zurück.

  • Schritt 5 – Wenn die Stringlänge ungerade ist und die ungerade Häufigkeit größer als 1 ist, geben Sie „false“ zurück.

  • Schritt 6 – Gibt true zurück, wenn sowohl 1 als auch 0 in der Zeichenfolge vorhanden sind.

  • Schritt 7 – Geben Sie false zurück.

Beispiel

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

#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;

}

Nach dem Login kopieren

Ausgabe

1

Yes

Nach dem Login kopieren
Nach dem Login kopieren
  • Zeitkomplexität – O(N), weil wir eine for-Schleife verwenden, um über die Zeichenfolge zu iterieren.

  • Raumkomplexität − O(1), da wir immer ein Array der Länge 26 verwenden.

Fazit

Wir haben zwei Methoden kennengelernt, um zu überprüfen, ob eine Zeichenfolge zu einem Palindrom werden kann, indem Zeichen basierend auf einer bestimmten Bedingung ausgetauscht werden. Die erste Methode verwendet Sammlungen und Karten, während die zweite Methode nur Arrays zum Speichern von Daten verwendet. Die zweite Methode ist besser als die erste Methode, da die Methode insert() O(logn) Zeit benötigt, um Daten in die Sammlung einzufügen, während das Array nur O(1) Zeit benötigt.

Das obige ist der detaillierte Inhalt vonPrüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So fügen Sie Swap-Speicherplatz unter Ubuntu 22.04 LTS hinzu So fügen Sie Swap-Speicherplatz unter Ubuntu 22.04 LTS hinzu Feb 20, 2024 am 11:12 AM

Swap Space spielt in Linux-Systemen eine wichtige Rolle, insbesondere wenn das System nur wenig Arbeitsspeicher hat. Es fungiert als Backup-Speicherplatz, der dazu beiträgt, dass das System auch unter hoher Last reibungslos läuft und die Stabilität aufrechterhält. Dieser Artikel bietet Ihnen eine detaillierte Anleitung zum Hinzufügen von Swap-Speicherplatz unter Ubuntu 22.04LTS, um sicherzustellen, dass die Leistung Ihres Systems optimiert ist und verschiedene Arbeitslasten bewältigen kann. Swap Space verstehen Swap Space stellt virtuellen Speicher bereit, der als Ergänzung zum physischen RAM des Systems verwendet wird. Wenn das System nur noch wenig RAM hat, lagert der Kernel Daten auf die Festplatte aus, um Speichermangel und Systemabstürze zu verhindern. Linux-Systeme verwenden üblicherweise Swap Space, um diese Situation zu bewältigen. Führen Sie mehrere speicherintensive Anwendungen gleichzeitig aus, um sehr große Dateien oder Daten zu verarbeiten

Python-Programm: Vertauschen Sie die Positionen des ersten und letzten Elements in einer Matrix zwischen Spalten Python-Programm: Vertauschen Sie die Positionen des ersten und letzten Elements in einer Matrix zwischen Spalten Sep 08, 2023 pm 04:29 PM

Eine Matrix ist eine zweidimensionale Anordnung von Zahlen, die in Zeilen und Spalten angeordnet sind. Python verfügt über keinen Datentyp zur Darstellung von Matrizen, wir können jedoch verschachtelte Listen oder NumPy-Arrays als Matrizen verwenden. Sehen Sie sich die folgenden Eingabe- und Ausgabeszenarien an, um zu erfahren, wie Sie die ersten und letzten Spaltenelemente einer Matrix austauschen. Eingabe-Ausgabe-Szenario Angenommen, wir haben eine 3X3-Matrix, die durch eine Liste von Listen dargestellt wird. Die Ausgabematrix ist die resultierende Matrix aus dem Austausch der ersten und letzten Spaltenelemente. Eingabematrix:[1,3,4][4,5,6][7,8,3]Ausgabematrix:[4,3,1][4,5,6][3,8,7]Betrachten wir eine andere Eine Matrix, deren Zeilen und Spalten ungleich sind. Eingabematrix:

Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Längste nicht ansteigende Teilsequenz in einer Binärzeichenfolge Sep 07, 2023 pm 11:13 PM

Bei diesem Problem müssen wir die längste nicht zunehmende Teilfolge einer gegebenen Zeichenfolge finden. Nicht aufsteigend bedeutet, dass die Zeichen entweder gleich oder in absteigender Reihenfolge sind. Da Binärzeichenfolgen nur „0“ und „1“ enthalten, sollte die resultierende Zeichenfolge entweder mit „1“ beginnen und mit „0“ enden oder mit „0“ oder „1“ beginnen und enden. Um dieses Problem zu lösen, zählen wir das Präfix „1“ und das Suffix „0“ an jeder Position der Zeichenfolge und ermitteln die maximale Summe aus Präfix „1“ und Suffix „0“. Problemstellung: Wir erhalten eine binäre Zeichenfolge str. Wir müssen die längste nicht zunehmende Teilsequenz aus der gegebenen Zeichenfolge finden. Beispiel Input–str="010100"Output–4 veranschaulicht die längste nicht-rekursive Methode

In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln In PHP besteht die Funktion der Funktion pack() darin, Daten in eine Binärzeichenfolge umzuwandeln Aug 31, 2023 pm 02:05 PM

Die Funktion pack() packt Daten in eine Binärzeichenfolge. Syntax pack(format,args) Parameter format – das zu verwendende Format. Die folgenden Werte sind möglich: a – mit NUL aufgefüllte Zeichenfolge A – mit Leerzeichen aufgefüllte Zeichenfolge h – hexadezimale Zeichenfolge, niedriges Nibble zuerst H – hexadezimale Zeichenfolge, hohes Nibble zuerst c – vorzeichenbehaftetes Zeichen C – vorzeichenloses Zeichen s – vorzeichenbehaftetes Kurzzeichen (immer 16 Bit). , Maschinenbyte-Reihenfolge) S – unsigned short (immer 16 Bit, Maschinenbyte-Reihenfolge) n – unsigned short (immer 16 Bit, Big-Endian-Bytereihenfolge) v – unsigned short (immer 16 Bit, Little-Endian-Bytereihenfolge) i – vorzeichenbehaftete Ganzzahl (hängt von der Maschinengröße und der Byte-Reihenfolge ab) I – Keine vorzeichenbehaftete Ganzzahl (abhängig von

Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Ermitteln Sie in C++ die Anzahl der eindeutigen Permutationen einer Binärzeichenfolge, die mit 1 beginnt Sep 05, 2023 am 09:01 AM

In der gegebenen Aufgabe erhalten wir eine Zeichenfolge bestehend aus 0 und 1; wir müssen die Gesamtzahl aller Permutationen ermitteln, die mit 1 beginnen. Da die Antwort eine große Zahl sein kann, nehmen wir sie modulo 1000000007 und geben sie aus. Input:str="10101001001"Output:210Input:str="101110011"Output:56 Wir werden dieses Problem lösen, indem wir kombinatorische Mathematik anwenden und einige Formeln aufstellen. Lösungsmethode Bei dieser Methode zählen wir die Anzahl der Nullen und Einsen. Angenommen, n ist die Anzahl der Einsen, die in unserer Zeichenfolge erscheinen, und m ist die Anzahl der Nullen, die in unserer Zeichenfolge erscheinen

Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann Prüft, ob eine Zeichenfolge durch Vertauschen von Zeichenpaaren an Indizes mit ungleichen Zeichen in einer Binärzeichenfolge eine Palindromzeichenfolge bilden kann Sep 02, 2023 pm 08:09 PM

Problemstellung: Wir haben einen String str und einen binären String B. Die Länge beider Saiten ist gleich N. Wir müssen prüfen, ob wir String str zu einem Palindrom-String machen können, indem wir seine Zeichen mehrmals auf jedem Indexpaar austauschen, das ungleiche Zeichen in String B enthält. Beispiel Beispiel Eingabe str='AAS' B='101' Ausgabe 'JA' Die chinesische Übersetzung von Erläuterung lautet: Erläuterung Wir können str[1] und str[2] austauschen, da B[1] und B[2] nicht gleich sind . Die letzte Zeichenfolge kann „ASA“ sein. Eingabe str='AASS' B='1111' und Ausgabe 'Nein'. Die chinesische Übersetzung von Erklärung lautet: Erklärung, dass wir den String nicht palindromieren können,

C++-Programm zum Ermitteln der Anzahl eindeutiger Matrizen, die durch Vertauschen von Zeilen und Spalten generiert werden können C++-Programm zum Ermitteln der Anzahl eindeutiger Matrizen, die durch Vertauschen von Zeilen und Spalten generiert werden können Sep 01, 2023 am 11:53 AM

Angenommen, wir haben eine nxn-Matrix. Jedes Element in der Matrix ist einzigartig und eine ganze Zahl zwischen 1 und n2. Jetzt können wir die folgenden Operationen in beliebiger Anzahl und Reihenfolge ausführen. Wir wählen zwei beliebige ganze Zahlen x und y in der Matrix, wobei (1≤x

Finden Sie den Player mit der geringsten Anzahl an Nullen, nachdem Sie eine Binärzeichenfolge geleert haben (durch Entfernen nicht leerer Teilzeichenfolgen). Finden Sie den Player mit der geringsten Anzahl an Nullen, nachdem Sie eine Binärzeichenfolge geleert haben (durch Entfernen nicht leerer Teilzeichenfolgen). Sep 16, 2023 am 10:21 AM

In diesem Artikel werden wir ein interessantes Problem im Zusammenhang mit dem Bereich der String-Manipulation und der Spieltheorie diskutieren: „Leeren Sie einen binären String, indem Sie nicht leere Teilstrings entfernen, und finden Sie den Spieler mit den wenigsten verbleibenden Nullen.“ Diese Frage untersucht das Konzept der Verwendung binärer Zeichenfolgen für Wettkampfspiele. Unser Ziel ist es, den Spieler zu finden, der am Ende des Spiels die wenigsten 0 übrig hat. Wir werden dieses Problem diskutieren, eine C++-Codeimplementierung bereitstellen und das Konzept anhand eines Beispiels erläutern. Die Problemstellung verstehen Zwei Spieler erhalten eine Binärzeichenfolge und spielen abwechselnd das Spiel. In jedem Zug entfernt der Spieler nicht leere Teilzeichenfolgen, die mindestens eine „1“ enthalten. Das Spiel endet, wenn die Zeichenfolge leer ist oder keine „1“ in der Zeichenfolge vorhanden ist. Spieler, die nicht in der Lage sind, Maßnahmen zu ergreifen, verlieren das Spiel. Die Aufgabe besteht darin, die endgültige 0 zu finden

See all articles