Heim > Backend-Entwicklung > C++ > Hauptteil

Palindromische Teilstring-Abfrage in C++

WBOY
Freigeben: 2023-09-22 09:05:05
nach vorne
669 Leute haben es durchsucht

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]).
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

Ausgabe

Palindrome
Palindrome
Not palindrome!
Nach dem Login kopieren

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.

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;
}
Nach dem Login kopieren

Ausgabe

palindrome!
not palindrome!
palindrome!
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage