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

C++-এ Permutation in String

এই সমস্যায় দুটি স্ট্রিং s1 এবং s2 দেওয়া থাকলে, s2-তে s1-এর কোনো পারমুটেশন সাবস্ট্রিং হিসেবে আছে কিনা চেক করতে হবে।

উদাহরণ: s1="abc", s2="findcab" -> আউটপুট true (১)। কারণ "cab" হলো "abc"-এর পারমুটেশন।

সমাধানের পদ্ধতি (Sliding Window + Frequency Count)

  • s1-এর ক্যারেক্টার ফ্রিকোয়েন্সি cnt1[26]-এ স্টোর করুন।
  • s2-এর ওপর স্লাইডিং উইন্ডো (সাইজ = s1.size()) চালান।
  • উইন্ডোর ফ্রিকোয়েন্সি cnt2[26]-এ মেইনটেইন করুন।
  • যদি cnt1 == cnt2 হয়, তবে true রিটার্ন করুন।

উদাহরণ (C++)

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

class Solution {
public:
    bool checkInclusion(string s1, string s2) {
        if (s1.size() > s2.size()) return false;
        vector<int> cnt1(26, 0), cnt2(26, 0);
        for (char c : s1) cnt1[c - 'a']++;
        int windowSize = s1.size();
        for (int i = 0; i < s2.size(); i++) {
            cnt2[s2[i] - 'a']++;
            if (i >= windowSize) {
                cnt2[s2[i - windowSize] - 'a']--;
            }
            if (cnt1 == cnt2) return true;
        }
        return false;
    }
};

int main() {
    Solution ob;
    cout << (ob.checkInclusion("abc", "findcab") ? "true" : "false");
    return 0;
}

ইনপুট

"abc" "findcab"

আউটপুট

true

নোট: মূল কোডে একটি জটিল টু-পয়েন্টার অ্যাপ্রোচ দেওয়া ছিল, কিন্তু ফিক্সড সাইজ স্লাইডিং উইন্ডো সহজ এবং স্পষ্ট।

  1. C++-এ লেটার কেস পারমুটেশন

  2. C++-এ String at() মেথড ব্যবহার

  3. C++-এ স্ট্রিং টোকেনাইজেশন: স্ট্রিম এবং getline() ব্যবহার

  4. C++-এ স্ট্রিং টোকেনাইজ (Tokenize) করা