Wednesday, July 3, 2024
HomeData ModellingData Structure & AlgorithmFrequency of a substring in a string using pthread

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

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 <iostream>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#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;
}


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


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


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


Javascript




// JavaScript program to find the frequency
// of occurrences of a substring
// in the given string using pthread
 
let count = [0, 0, 0, 0];
let str = "prrrogramisprrrogramming";
let sub = "rr";
 
function strSeqCount(value) {
    let l1 = str.length;
    let l2 = sub.length;
    for (let i = value; i < l1; i += 4) {
        let flag = 0;
        let k = i;
        for (let j = 0; j < l2; j++) {
            if (sub[j] === str[k]) {
                k++;
            } else {
                flag = 1;
                break;
            }
        }
        if (flag === 0) {
            count[value]++;
        }
    }
}
 
function runThreads() {
    let x = [0, 1, 2, 3];
    console.log("Enter the main string: ", str);
    console.log("Enter the sequence to search: ", sub);
 
    let threadIndex = 0;
    function runNextThread() {
        if (threadIndex < x.length) {
            strSeqCount(x[threadIndex]);
            threadIndex++;
            setTimeout(runNextThread, 0); // Non-blocking I/O using setTimeout
        } else {
            finishExecution();
        }
    }
 
    runNextThread();
}
 
function finishExecution() {
    let total_count = count.reduce((sum, value) => sum + value, 0);
    console.log("Frequency of substring: ", total_count);
}
 
runThreads();
 
// This code is contributed by Samim Hossain Mondal


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

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Nango Kalahttps://www.kala.co.za
Experienced Support Engineer with a demonstrated history of working in the information technology and services industry. Skilled in Microsoft Excel, Customer Service, Microsoft Word, Technical Support, and Microsoft Office. Strong information technology professional with a Microsoft Certificate Solutions Expert (Privet Cloud) focused in Information Technology from Broadband Collage Of Technology.
RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments