Heim >Backend-Entwicklung >C++ >Fragen Sie ab, ob String B als Teilstring in String A vorhanden ist
In diesem Tutorial sehen wir Abfragen, um zu überprüfen, ob String B als Teilstring von String A existiert. Ein Teilstring ist ein String, der Teil des Hauptstrings ist. Im Abfragearray gibt es einige Ganzzahlwerte, und der Index von Zeichenfolge A wird überprüft, um festzustellen, ob diese Ganzzahlwerte mit der Teilzeichenfolge B übereinstimmen oder nicht. Wir verwenden C++-Abfragen, um herauszufinden, ob B eine Teilzeichenfolge von A ist oder nicht. Bei diesem Ansatz gibt es eine Zeichenfolge A und B ist die Teilzeichenfolge von A. Abfragen in C++ sind ganzzahlige Werte, die in Array-Form dargestellt werden. Es gibt eine Zeichenfolge A, B ist die Teilzeichenfolge und i ist der ganzzahlige Wert einiger Abfragen. Wenn Teilzeichenfolge B in Zeichenfolge A bei Abfrageindexwerten vorhanden ist, lautet die Ausgabe „Ja“, andernfalls lautet die Ausgabe „Nein“.
String A = “ababababa” Substring B = “aba” Queries[] = {0,1, 2, 3}
A[0,2] = Yes A[1,3] = No
Im obigen Beispiel sind bei A[0,2] die Zeichen bei den Indexwerten 0 bis 2 „aba“ und gleich der Teilzeichenfolge B. Die Ausgabe lautet also „Ja“.
Bei A[1, 3] sind die Zeichen bei den Indexwerten 1 bis 3 „bab“ und nicht gleich der Teilzeichenfolge B. Daher ist die Ausgabe No.
A = “TutorialsPoint” B = “Tutorials” Queries[] = {0, 9, 14}
A[0,9] = Yes A[1, 10] = No A[2, 11] = No
Im obigen Beispiel prüfen wir die Existenz von Teilzeichenfolge B in Zeichenfolge A, indem wir den Abfragewert als Indexwert von Zeichenfolge A verwenden. Bei A[0, 9] ist Teilzeichenfolge B in Zeichenfolge A vorhanden und die Ausgabe lautet „Ja“. . Danach ist B bei anderen Indexwerten nicht in A vorhanden, sodass die Ausgabe Nein ist.
Um das obige Beispiel in der Programmiersprache C++ zu implementieren, verwenden wir den Rolling-Hash-Algorithmus, um die Teilzeichenfolge mit der Eingabezeichenfolge abzugleichen. Berechnen Sie die Hash-Werte von Teilstring B mithilfe der Hash-Tabelle. Die Hash-Tabelle stellt Schlüssel-Wert-Paare bereit. Verwenden Sie den Rolling-Hash-Algorithmus, um die Zeichenfolge A schneller zu verarbeiten und ein erneutes Aufwärmen zu vermeiden.
#include <bits/stdc++.h> #define mod 3803 #define d 26 using namespace std; int hash_y; int* hash_x; int* pro; //user defined function to calculate the hash values int modin(int z){ int q = mod - 2; int r = 1; while (q != 1) { if (q % 2 == 1) r = (r * z) % mod; z = (z * z) % mod; q /= 2; } return (r * z) % mod; } // Function to generate hash void getOut(string& x, string& y){ hash_x = new int[x.size()]; pro = new int[x.size()]; for (int j = y.size() - 1; j >= 0; j--) hash_y = (hash_y * d + (y[j] - 97)) % mod; pro[0] = 1; hash_x[0] = (x[0] - 97) % mod; for (int j = 1; j < x.size(); j++) { pro[j] = (pro[j - 1] * d) % mod; hash_x[j] = (hash_x[j - 1] + pro[j] * (x[j] - 97)) % mod; } } //user defined function to return check substring is present in string or not bool checkEq(int j, int len_x, int len_y){ int z; if (j == 0) z = hash_x[len_y - 1]; else { z = (hash_x[j + len_y - 1] - hash_x[j - 1] + 2 * mod) % mod; z = (z * modin(pro[j])) % mod; } if (z == hash_y) return true; return false; } // Controller int main(){ string x = "TutorialsPoint"; string y = "Tutorials"; //calling function getOut(x, y); //calling queries function int queries[] = { 0, 9, 14}; int q = sizeof(queries) / sizeof(queries[0]); for (int i = 0; i < q; i++){ if (checkEq(queries[i], x.size(), y.size())) cout << "Yes substring is present\n"; else cout << "No substring is not present\n"; } return 0; }
Yes substring is present No substring is not present Yes substring is not present
在本教程中,我们开发了C++代码来实现查找查询以检查子字符串是否存在于字符串中的任务.我们使用了滚动哈希方法来生成查询并获取结果.滚动哈希算法是一种在C++中计算子字符串哈希值的字符串算法, 它使用旧值计算哈希值.为了使任务简单和简单,我们使用哈希函数计算哈希值.我们可以根据需要使用多个哈希函数.
Das obige ist der detaillierte Inhalt vonFragen Sie ab, ob String B als Teilstring in String A vorhanden ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!