Heim  >  Artikel  >  Backend-Entwicklung  >  Palindromische Teilstring-Abfrage in C++

Palindromische Teilstring-Abfrage in C++

WBOY
WBOYnach vorne
2023-09-22 09:05:05607Durchsuche

Palindromische Teilstring-Abfrage in C++

In diesem Tutorial müssen wir die palindromische Teilzeichenfolgenabfrage einer bestimmten Zeichenfolge lösen. Das Lösen von Palindrom-Teilzeichenfolgenabfragen ist viel komplexer als das Lösen regulärer Abfragen in C++. Es erfordert komplexeren Code und komplexere Logik.

In diesem Tutorial haben wir String-Str- und Q-Substring-Abfragen [L...R] bereitgestellt, von denen jede zwei Werte L und R hat. Unser Ziel ist es, ein Programm zu schreiben, das eine Abfrage löst, um festzustellen, ob Teilzeichenfolge[L...R] ein Palindrom ist. Wir müssen bestimmen, ob der im Bereich L bis R gebildete Teilstring ein Palindrom ist, um jede Abfrage zu lösen. Zum Beispiel -

Let's input "abbbabaaaba" as our input string.
The queries were [3, 13], [3, 11], [5, 8], [8, 12]
It is necessary to determine whether the substring is a plaindrome
A palindrome is "abaaabaaaba" (3, 13) .
It is not possible to write "baaa" as a palindrome [3, 11].
As in [5, 8]: "aaab" cannot be a palindrome.
There is a palindrome in "baaab" ([3, 12]).

Lösungsmethode

Naive Methode

Hier müssen wir das Palindrom finden, indem wir prüfen, ob die Teilzeichenfolge zwischen dem Indexbereich L bis R liegt. Daher müssen wir eine Abfrage für alle Teilzeichenfolgen durchführen um zu sehen, ob es ein Palindrom ist. Da es Q-Anfragen gibt, dauert die Beantwortung jeder Anfrage 0(N). Im schlimmsten Fall dauert es 0(Q.N) Zeit.

Beispiel

#include <bits/stdc++.h>
using namespace std;
int isPallindrome(string str){
   int i, length;
   int flag = 0;
   length = str.length();
   for(i=0;i < length ;i++){
      if(str[i] != str[length-i-1]) {
         flag = 1; break;
      }
   }
   if (flag==1)
      return 1;
   return 0;
}
void solveAllQueries(string str, int Q, int query[][2]){
   for(int i = 0; i < Q; i++){
      isPallindrome(str.substr(query[i][0] - 1, query[i][1] - 1))? cout<<"Palindrome\n":cout<<"Not palindrome!\n";
   }
}
int main() {
   string str = "abccbeba"; int Q = 3;
   int query[Q][2] = {{3, 5}, {5, 7}, {2, 1}};
   solveAllQueries(str, Q, query);
   return 0;
}

Ausgabe

Palindrome
Palindrome
Not palindrome!

Dynamische Programmiermethode

Die Verwendung einer dynamischen Programmiermethode zur Lösung des Problems ist eine effektive Option. Um dieses Problem zu lösen, müssen wir ein DP-Array erstellen, bei dem es sich um ein zweidimensionales Array handelt, das einen booleschen Wert enthält, der angibt, ob substring[i...j] ein Palindrom von DP[i][j] ist. p>

erstellt diese DP-Matrix und überprüft alle L-R-Werte für jede Abfrage.

Beispiel

#include <bits/stdc++.h>
using namespace std;
void computeDP(int DP[][50], string str){
   int length = str.size();
   int i, j;
   for (i = 0; i < length; i++) {
      for (j = 0; j < length; j++)
         DP[i][j] = 0;
   }
   for (j = 1; j <= length; j++) {
      for (i = 0; i <= length - j; i++) {
         if (j <= 2) {
            if (str[i] == str[i + j - 1])
               DP[i][i + j - 1] = 1;
         }
         else if (str[i] == str[i + j - 1])
            DP[i][i + j - 1] = DP[i + 1][i + j - 2];
      }
   }
}
void solveAllQueries(string str, int Q, int query[][2]){
   int DP[50][50];
   computeDP(DP, str);
   for(int i = 0; i < Q; i++){
      DP[query[i][0] - 1][query[i][1] - 1]?cout
      <<"not palindrome!\n":cout<<"palindrome!\n";
   }
}
int main() {
   string str = "abccbeba"; int Q = 3;
   int query[Q][2] = {{3, 5}, {5, 7}, {2, 1}};
   solveAllQueries(str, Q, query);
   return 0;
}

Ausgabe

palindrome!
not palindrome!
palindrome!

Fazit

In diesem Tutorial haben wir gelernt, wie man eine palindromische Teilzeichenfolgenabfrage mit C++-Code löst. Wir können diesen Code auch in Java, Python und anderen Sprachen schreiben. Dieser Code ist einer der komplexesten und langwierigsten. Palindrom-Abfragen sind schwieriger als normale Teilstring-Abfragen und erfordern eine sehr präzise Logik. Wir hoffen, dass Sie dieses Tutorial hilfreich fanden.

Das obige ist der detaillierte Inhalt vonPalindromische Teilstring-Abfrage in C++. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen