ধরুন আমাদের কাছে একটি স্ট্রিং s এবং dict নামক স্ট্রিংগুলির একটি তালিকা রয়েছে, আমাদের সেই ডিক্টে বিদ্যমান সাবস্ট্রিংগুলিকে s-এ মোড়ানোর জন্য বোল্ড ট্যাগের একটি বন্ধ জোড়া এবং যোগ করতে হবে। যখন এই ধরনের দুটি সাবস্ট্রিং ওভারল্যাপ হয়, তখন আমাদেরকে শুধুমাত্র এক জোড়া বন্ধ বোল্ড ট্যাগ দ্বারা একত্রে মুড়ে দিতে হবে। এছাড়াও, বোল্ড ট্যাগ দ্বারা মোড়ানো দুটি সাবস্ট্রিং পরপর হলে, আমাদের তাদের একত্রিত করতে হবে।
সুতরাং, যদি ইনপুটটি s ="abcxyz123" dict is ["abc","123"] এর মত হয়, তাহলে আউটপুট হবে "abcxyz123" পি>
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=s
এর আকার -
n
আকারের একটি অ্যারে বোল্ড সংজ্ঞায়িত করুন -
ret :=ফাঁকা স্ট্রিং
-
আরম্ভ করার জন্য i :=0, শেষ :=0, যখন i
-
j শুরু করার জন্য :=0, যখন j
করুন -
যদি সূচী থেকে s এর সাবস্ট্রিং (i থেকে dict[j] - 1 এর আকার) dict[j] এর মতো হয়, তাহলে −
-
শেষ :=শেষের সর্বাধিক এবং i + dict[j]
এর আকার
-
-
-
bold[i] :=end> i
-
-
আরম্ভ করার জন্য i :=0, যখন i
-
যদি বোল্ড[i] শূন্য হয়, তাহলে −
-
ret :=ret + s[i]
-
j :=i + 1
-
নিম্নলিখিত অংশ উপেক্ষা করুন, পরবর্তী পুনরাবৃত্তি এড়িয়ে যান
-
-
j :=i
-
যখন (j
করুন-
(j 1 দ্বারা বাড়ান)
-
-
ret :=সূচী i থেকে j - i - 1 concatenate "" concatenate s
পর্যন্ত ret এর সাবস্ট্রিং
-
-
রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; class Solution { public: string addBoldTag(string s, vector<string>& dict) { int n = s.size(); vector<int> bold(n); string ret = ""; for (int i = 0, end = 0; i < s.size(); i++) { for (int j = 0; j < dict.size(); j++) { if (s.substr(i, dict[j].size()) == dict[j]) { end = max(end, i + (int)dict[j].size()); } } bold[i] = end > i; } int j; for (int i = 0; i < s.size(); i = j) { if (!bold[i]) { ret += s[i]; j = i + 1; continue; } j = i; while (j < s.size() && bold[j]) j++; ret += "<b>" + s.substr(i, j - i) + "</b>"; } return ret; } }; main(){ Solution ob; vector<string> v = {"abc","123"}; cout << (ob.addBoldTag("abcxyz123", v)); }
ইনপুট
"abcxyz123", ["abc","123"]
আউটপুট
<b>abc</b>xyz<b>123</b>