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

C++-এ র‍্যাপঅরাউন্ড স্ট্রিং-এ ইউনিক সাবস্ট্রিং খুঁজে বের করা


ধরুন s হলো "abcdefghijklmnopqrstuvwxyz" স্ট্রিং-এর অসীম র‍্যাপঅরাউন্ড সংস্করণ, তাহলে s-এর মান দেখাবে এমন − "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...."।

আমাদের কাছে আরেকটি স্ট্রিং p আছে। আমাদের কাজ হলো p-এর কতগুলো ইউনিক নন-এম্পটি সাবস্ট্রিং s-এ উপস্থিত আছে তা বের করা। নির্দিষ্টভাবে, ইনপুট হলো স্ট্রিং p এবং আউটপুট হবে p-এর আলাদা নন-এম্পটি সাবস্ট্রিংয়ের সংখ্যা s স্ট্রিং-এ।

তাই যদি ইনপুট হয় “zab” তবে আউটপুট হবে ৬। স্ট্রিং “zab”-এর s-এ ৬টি সাবস্ট্রিং রয়েছে: “z”, “a”, “b”, “za”, “ab”, “zab”।

এটি সমাধান করার জন্য নিচের ধাপগুলো ফলো করব:

  • সাইজ ২৬-এর একটি dp অ্যারে তৈরি করুন, x := 0 সেট করুন

  • i = 0 থেকে p-এর সাইজ পর্যন্ত লুপ চালান

    • যদি i > 0 এবং (p[i] – p[i – 1] == 1 অথবা p[i – 1] – p[i] == 25), তবে x ১ বাড়ান, অন্যথায় x := 1 সেট করুন

    • dp[p[i] – 'a'র ASCII] := max(x, dp[p[i] – 'a'র ASCII])

  • ret := 0

  • i = 0 থেকে ২৫ পর্যন্ত লুপ চালান

    • ret := ret + dp[i]

  • ret রিটার্ন করুন

উদাহরণ (C++)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −

#include <bits/stdc++.h> using namespace std; class Solution { public:    int findSubstringInWraproundString(string p) {       vector <int> dp(26);       int x = 0;       for(int i = 0; i < p.size(); i++){          if(i > 0 && (p[i] - p[i - 1] == 1 || p[i - 1] - p[i] == 25)){             x++;          }          else x = 1;             dp[p[i] - 'a'] = max(x, dp[p[i] - 'a']);       }       int ret = 0;       for(int i = 0; i < 26; i++){          ret += dp[i];       }       return ret;    } }; main(){    Solution ob;    cout << (ob.findSubstringInWraproundString("zab")); }

ইনপুট

"zab"

আউটপুট

6
  1. জাভাস্ক্রিপ্টে সার্কুলার স্ট্রিংয়ে ইউনিক সাবস্ট্রিং গণনা করা

  2. সি++ কোড: সংখ্যাসূচক স্ট্রিংয়ের জোড় সাবস্ট্রিং গণনা করুন

  3. C++-এ স্ট্রিংয়ে ৬ দিয়ে বিভাজ্য সাবস্ট্রিং গণনা

  4. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা