কম্পিউটার টিউটোরিয়াল

C++-এ স্ট্রিং-এর সব সাফিক্সের সাথে সাদৃশ্যের যোগফল


এই সমস্যাতে, আমাদের একটি স্ট্রিং str দেওয়া আছে। আমাদের কাজ হলো স্ট্রিং-এর সব সাফিক্সের সাথে এর সাদৃশ্যের যোগফল বের করার প্রোগ্রাম লিখা।

স্ট্রিং str-এর সাফিক্সগুলো হলো স্ট্রিং-এর শুরুর ক্যারেক্টারগুলো বাদ দিয়ে বাকি অংশগুলো।

স্ট্রিং-এর সাদৃশ্য str1 এবং str2 হলো উভয় স্ট্রিং-এর মধ্যে সবচেয়ে বড় কমন প্রিফিক্সের দৈর্ঘ্য। উদাহরণস্বরূপ, str1 = 'abbac' এবং str2 = 'abb' হলে সাদৃশ্য ৩।

আবার str1 = 'abca' এবং str2 = 'ca' হলে সাদৃশ্য ০। কারণ আমরা শুরু থেকে গণনা করি।

উদাহরণ দিয়ে বুঝি,

ইনপুট − str = 'xyxyx'

আউটপুট −

ব্যাখ্যা − সাবস্ট্রিংগুলো এবং স্ট্রিং-এর সব সাফিক্সের সাথে সাদৃশ্য −

'xyxyx' -> 5 
'yxyx' -> 0 
'xyx' -> 3 
'yx' -> 0 
'x' -> 1 
Sum = 5 + 0 + 3 + 0 + 1 = 9

এই সমস্যা সমাধানের জন্য, আমরা Z-অ্যালগরিদম ব্যবহার করে Z-অ্যারে ক্যালকুলেট করব। Z-অ্যারে স্ট্রিং-এর দৈর্ঘ্যের সমান আকারের একটি অ্যারে। প্রতিটি এলিমেন্ট স্ট্রিং-এর একটি প্রিফিক্স সংরক্ষণ করে। নিচের প্রোগ্রামটি ইমপ্লিমেন্টেশন দেখাচ্ছে,

উদাহরণ

#include <bits/stdc++.h> 
using namespace std; 

void createZArray(string str, int n, int Zarray[]) { 
    int L, R, k; 
    L = R = 0; 
    for (int i = 1; i < n; ++i) { 
        if (i > R) { 
            L = R = i; 
            while (R < n && str[R - L] == str[R]) 
                R++; 
            Zarray[i] = R - L; 
            R--; 
        } 
        else { 
            k = i - L; 
            if (Zarray[k] < R - i + 1) 
                Zarray[i] = Zarray[k]; 
            else { 
                L = i; 
                while (R < n && str[R - L] == str[R]) 
                    R++; 
                Zarray[i] = R - L; 
                R--; 
            } 
        } 
    } 
} 

int calSumSimilarities(string s, int n) { 
    int Zarray[n] = { 0 }; 
    createZArray(s, n, Zarray); 
    int total = n; 
    for (int i = 1; i < n; i++) 
        total += Zarray[i]; 
    return total; 
} 

int main() { 
    string s = "xyxyx"; 
    int n = s.length(); 
    cout<<"Sum of similarities of string with all of its suffixes is "<<calSumSimilarities(s, n); 
    return 0; 
}

আউটপুট

Sum of similarities of string with all of its suffixes is 9

  1. নির্দিষ্ট যোগফল দিয়ে সব ট্রিপলেট প্রিন্ট করা C++-তে

  2. নির্দিষ্ট যোগফল দিয়ে সব পেয়ার প্রিন্ট করা C++-তে

  3. স্ট্রিংয়ের সব প্যালিনড্রোম পারমুটেশন প্রিন্ট করা C++-তে

  4. ক্যারেক্টার রিপিটিশন সহ স্ট্রিংয়ের সব পারমুটেশন প্রিন্ট করা C++-তে