GFG App
Open App
Browser
Continue

# Frequency of a substring in a string using pthread

Given an input string and a substring. Find the frequency of occurrences of a substring in the given string using pthreads. Examples:

```Input: string = "man"
substring = "dhimanman"
Output: 2

Input: string = "banana"
substring = "nn"
Output: 0```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Note: It is advised to execute the program in Linux based system. Compile in linux using following code:

`g++ -pthread program_name.cpp`

Program:

## CPP

 `// C++ program to find the frequency ` `// of occurrences of a substring ` `// in the given string using pthread `   `#include ` `#include ` `#include ` `#include ` `#include ` `#include ` `#define max 4 ` `using` `namespace` `std; `   `int` `count[max] = { 0 }; ` `string str, sub; `   `void``* str_seq_count(``void``* args) ` `{ ` `    ``int` `value = *(``int``*)args; ` `    ``int` `i, j, k, l1, l2, flag; `   `    ``// calculating length of string 1 ` `    ``l1 = str.length(); `   `    ``// calculating length of substring ` `    ``l2 = sub.length(); `   `    ``for` `(i = 0 + value; i < l1; i = i + max) { `   `        ``flag = 0; ` `        ``k = i; `   `        ``for` `(j = 0; j < l2; j++) { `   `            ``// flag=0; ` `            ``if` `(sub[j] == str[k]) ` `                ``k++; ` `            ``else` `{ ` `                ``flag = 1; ` `                ``break``; ` `            ``} ` `        ``} ` `        ``if` `(flag == 0) ` `            ``count[value] += 1; ` `    ``} ` `} `   `// Driver code ` `int` `main() ` `{ ` `    ``int` `sum = 0; ` `    ``int` `x[max]; ` `    ``for` `(``int` `a = 0; a < max; a++) ` `        ``x[a] = a; `   `    ``str = ``"prrrogramisprrrogramming"``; ` `    ``sub = ``"rr"``; `   `    ``cout << ``"Enter the main string: "` `        ``<< str << endl; ` `    ``cout << ``"Enter the sequence to search: "` `        ``<< sub << endl; `   `    ``int` `i, l1; `   `    ``pthread_t tid[max]; `   `    ``for` `(i = 0; i < max; i++) { ` `        ``pthread_create(&tid[i], NULL, ` `                    ``str_seq_count, ` `                    ``(``void``*)&x[i]); ` `    ``} ` `    ``for` `(i = 0; i < max; i++) ` `        ``pthread_join(tid[i], NULL); ` `    ``for` `(i = 0; i < max; i++) ` `        ``sum = sum + count[i]; ` `    ``cout << ``"Frequency of substring: "` `        ``<< sum; `   `    ``return` `0; ` `} `

## Python3

 `# Python program for the above approach`   `import` `threading`   `count ``=` `[``0``] ``*` `4` `str` `=` `"prrrogramisprrrogramming"` `sub ``=` `"rr"`   `def` `str_seq_count(value):` `    ``global` `count` `    ``l1 ``=` `len``(``str``)` `    ``l2 ``=` `len``(sub)` `    ``for` `i ``in` `range``(value, l1, ``4``):` `        ``flag ``=` `0` `        ``k ``=` `i` `        ``for` `j ``in` `range``(l2):` `            ``if` `sub[j] ``=``=` `str``[k]:` `                ``k ``+``=` `1` `            ``else``:` `                ``flag ``=` `1` `                ``break` `        ``if` `flag ``=``=` `0``:` `            ``count[value] ``+``=` `1`   `if` `__name__ ``=``=` `'__main__'``:` `    ``total_count ``=` `0` `    ``x ``=` `[i ``for` `i ``in` `range``(``4``)]` `    ``print``(``"Enter the main string: "``, ``str``)` `    ``print``(``"Enter the sequence to search: "``, sub)`   `    ``threads ``=` `[]` `    ``for` `i ``in` `range``(``4``):` `        ``t ``=` `threading.Thread(target``=``str_seq_count, args``=``(x[i],))` `        ``threads.append(t)` `        ``t.start()` `    ``for` `t ``in` `threads:` `        ``t.join()`   `    ``total_count ``=` `sum``(count)` `    ``print``(``"Frequency of substring: "``, total_count)`   `# This code is contributed by codebraxnzt`

## Java

 `// Java program for the above approach` `import` `java.util.Arrays;`   `public` `class` `Main {` `    ``static` `final` `int` `max = ``4``;` `    ``static` `int``[] count = ``new` `int``[max];` `    ``static` `String str, sub;`   `    ``public` `static` `void` `main(String[] args) {` `        ``int` `sum = ``0``;` `        ``final` `int``[] x = ``new` `int``[max];` `        ``for` `(``int` `a = ``0``; a < max; a++)` `            ``x[a] = a;`   `        ``str = ``"prrrogramisprrrogramming"``;` `        ``sub = ``"rr"``;`   `        ``System.out.println(``"Enter the main string: "` `+ str);` `        ``System.out.println(``"Enter the sequence to search: "` `+ sub);`   `        ``Thread[] tid = ``new` `Thread[max];`   `        ``for` `(``int` `i = ``0``; i < max; i++) {` `            ``final` `int` `value = i;` `            ``tid[i] = ``new` `Thread(() -> str_seq_count(x[value]));` `            ``tid[i].start();` `        ``}`   `        ``for` `(``int` `i = ``0``; i < max; i++) {` `            ``try` `{` `                ``tid[i].join();` `            ``} ``catch` `(InterruptedException e) {` `                ``e.printStackTrace();` `            ``}` `        ``}`   `        ``for` `(``int` `i = ``0``; i < max; i++)` `            ``sum = sum + count[i];`   `        ``System.out.println(``"Frequency of substring: "` `+ sum);` `    ``}`   `    ``static` `void` `str_seq_count(``int` `value) {` `        ``int` `i, j, k, l1, l2, flag;`   `        ``// calculating length of string 1` `        ``l1 = str.length();`   `        ``// calculating length of substring` `        ``l2 = sub.length();`   `        ``for` `(i = ``0` `+ value; i < l1; i = i + max) {`   `            ``flag = ``0``;` `            ``k = i;`   `            ``for` `(j = ``0``; j < l2; j++) {`   `                ``// flag=0;` `                ``if` `(sub.charAt(j) == str.charAt(k))` `                    ``k++;` `                ``else` `{` `                    ``flag = ``1``;` `                    ``break``;` `                ``}` `            ``}` `            ``if` `(flag == ``0``)` `                ``count[value] += ``1``;` `        ``}` `    ``}` `}`   `// This code is contributed by adityashatmfh`

## C#

 `// C# program for the above approach`   `using` `System;` `using` `System.Threading;`   `public` `class` `MainClass` `{` `    ``static` `readonly` `int` `max = 4;` `    ``static` `int``[] count = ``new` `int``[max];` `    ``static` `string` `str, sub;`   `    ``public` `static` `void` `Main(``string``[] args)` `    ``{` `        ``int` `sum = 0;` `        ``int``[] x = ``new` `int``[max];` `        ``for` `(``int` `a = 0; a < max; a++)` `            ``x[a] = a;`   `        ``str = ``"prrrogramisprrrogramming"``;` `        ``sub = ``"rr"``;`   `        ``Console.WriteLine(``"Enter the main string: "` `+ str);` `        ``Console.WriteLine(``"Enter the sequence to search: "` `+ sub);`   `        ``Thread[] tid = ``new` `Thread[max];`   `        ``for` `(``int` `i = 0; i < max; i++)` `        ``{` `            ``int` `value = i;` `            ``tid[i] = ``new` `Thread(() => str_seq_count(x[value]));` `            ``tid[i].Start();` `        ``}`   `        ``for` `(``int` `i = 0; i < max; i++)` `        ``{` `            ``try` `            ``{` `                ``tid[i].Join();` `            ``}` `            ``catch` `(ThreadInterruptedException e)` `            ``{` `                ``Console.WriteLine(e.StackTrace);` `            ``}` `        ``}`   `        ``for` `(``int` `i = 0; i < max; i++)` `            ``sum = sum + count[i];`   `        ``Console.WriteLine(``"Frequency of substring: "` `+ sum);` `    ``}`   `    ``static` `void` `str_seq_count(``int` `value)` `    ``{` `        ``int` `i, j, k, l1, l2, flag;`   `        ``// calculating length of string 1` `        ``l1 = str.Length;`   `        ``// calculating length of substring` `        ``l2 = sub.Length;`   `        ``for` `(i = 0 + value; i < l1; i = i + max)` `        ``{`   `            ``flag = 0;` `            ``k = i;`   `            ``for` `(j = 0; j < l2; j++)` `            ``{`   `                ``// flag=0;` `                ``if` `(sub[j] == str[k])` `                    ``k++;` `                ``else` `                ``{` `                    ``flag = 1;` `                    ``break``;` `                ``}` `            ``}` `            ``if` `(flag == 0)` `                ``count[value] += 1;` `        ``}` `    ``}` `}`     `// This code is contributed by Prince Kumar`

Output:

```Enter the main string: prrrogramisprrrogramming
Enter the sequence to search: rr
Frequency of substring: 4```

Related article: Frequency of a substring in a string

My Personal Notes arrow_drop_up