সমস্যা
একটি স্ট্রিং s এবং সমান দৈর্ঘ্যের শব্দগুলোর লিস্ট words দেওয়া আছে। s-এ এমন সাবস্ট্রিং খুঁজতে হবে যেটি words-এর সব শব্দ একবার করে সংযুক্ত করে বनीয়েছে (বिना কোনো অতিরিক্ত ক্যারেক্টার)। সব সাবস্ট্রিংয়ের শুরুয়ের ইন্ডেক্স রিটার্ন করুন।
উদাহরণ
s = "wordgoodgoodgoodword", words = ["word","good"]
আউটপুট: [0, 12] (সাবস্ট্রিং: "wordgood" এবং "goodword")
অ্যালগরিদম (স্লাইডিং উইন্ডো + ফ্রিকোয়েন্সি ম্যাপ)
words-এর শব্দগুলো ফ্রিকোয়েন্সি ম্যাপwordCnt-এ রাখুন।window = words.size() * words[0].size()(সাবস্ট্রিং দৈর্ঘ্য)।- স্ট্রিং
s-তে স্লাইডিং উইন্ডো চালান। - প্রতিটি উইন্ডোর জন্য হেল্পার ফাংশন
ok()দিয়ে যাচাই করুন যে সব শব্দ একবার করে আছে কিনা। - ম্যাচ হলে শুরুয়ের ইন্ডেক্স সংরক্ষণ করুন।
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]