Heim > Backend-Entwicklung > C++ > Fragen Sie ab, ob String B als Teilstring in String A vorhanden ist

Fragen Sie ab, ob String B als Teilstring in String A vorhanden ist

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-09-03 12:25:10
nach vorne
1050 Leute haben es durchsucht

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“.

Implementierung 1

的中文翻译为:

实施方案1

String A = “ababababa”
Substring B = “aba”
Queries[] = {0,1, 2, 3}
Nach dem Login kopieren

Ausgabe

A[0,2] = Yes
A[1,3] = No
Nach dem Login kopieren

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.

Implementierung 2

A = “TutorialsPoint”
B = “Tutorials”
Queries[] = {0, 9, 14}
Nach dem Login kopieren

Ausgabe

A[0,9] = Yes
A[1, 10] = No
A[2, 11] = No
Nach dem Login kopieren

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.

Beispiel

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

Ausgabe

Yes substring is present
No substring is not present
Yes substring is not present
Nach dem Login kopieren

结论

在本教程中,我们开发了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!

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