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

C++-এ স্ট্রিং-এ সব শব্দের সংযোজন থেকে সাবস্ট্রিংয়ের শুরুয়ের ইন্ডেক্স খুঁজে বের করা


সমস্যা

একটি স্ট্রিং s এবং সমান দৈর্ঘ্যের শব্দগুলোর লিস্ট words দেওয়া আছে। s-এ এমন সাবস্ট্রিং খুঁজতে হবে যেটি words-এর সব শব্দ একবার করে সংযুক্ত করে বनीয়েছে (বिना কোনো অতিরিক্ত ক্যারেক্টার)। সব সাবস্ট্রিংয়ের শুরুয়ের ইন্ডেক্স রিটার্ন করুন।

উদাহরণ

s = "wordgoodgoodgoodword", words = ["word","good"]

আউটপুট: [0, 12] (সাবস্ট্রিং: "wordgood" এবং "goodword")

অ্যালগরিদম (স্লাইডিং উইন্ডো + ফ্রিকোয়েন্সি ম্যাপ)

  1. words-এর শব্দগুলো ফ্রিকোয়েন্সি ম্যাপ wordCnt-এ রাখুন।
  2. window = words.size() * words[0].size() (সাবস্ট্রিং দৈর্ঘ্য)।
  3. স্ট্রিং s-তে স্লাইডিং উইন্ডো চালান।
  4. প্রতিটি উইন্ডোর জন্য হেল্পার ফাংশন ok() দিয়ে যাচাই করুন যে সব শব্দ একবার করে আছে কিনা।
  5. ম্যাচ হলে শুরুয়ের ইন্ডেক্স সংরক্ষণ করুন।

C++ কোড (সংক্ষিপ্ত)

class Solution {
    bool ok(string s, unordered_map<string,int> wordCnt, int n) {
        string temp = "";
        for (int i=0; i window) temp.erase(0, 1);
        }
        if (temp.size() % window == 0 && ok(temp, wordCnt, b[0].size()))
            ans.push_back(a.size() - window);
        return ans;
    }
};

আউটপুট

[0, 12]
  1. স্ট্রিং-এ প্রথম সর্বোচ্চ দৈর্ঘ্যের জোড় আকারের ওয়ার্ড বের করা (C++)

  2. C++ দিয়ে বাইনারি স্ট্রিং-এ ১ দিয়ে শুরু হওয়া অনন্য পারমুটেশনের সংখ্যা বের করা

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

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