मान लीजिए हमारे पास एक टेक्स्ट और पैटर्न नामक स्ट्रिंग्स की एक सूची है, हमें एक embolden फ़ंक्शन परिभाषित करना है जहां टेक्स्ट में सभी सबस्ट्रिंग्स जो दी गई पैटर्न में किसी भी स्ट्रिंग से मेल खाते हैं, उन्हें और टैग में लपेटा जाता है। यदि कोई दो पैटर्न आसन्न या ओवरलैप होते हैं, तो उन्हें एक टैग में मर्ज किया जाना चाहिए।
उदाहरण के लिए, यदि इनपुट है text = "thisissampleline" patterns = ["this", "issam", "sample"], तो आउटपुट होगा "abcdefg", क्योंकि bc और ef टेक्स्ट से मेल खाते हैं और और टैग में लपेटे जाते हैं।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे
- n := text का आकार
- bold := आकार n की एक सूची, और False मानों से भरें
- i को 0 से n तक रेंज में, करें
- patterns में प्रत्येक p के लिए, करें
- यदि text[इंडेक्स i से अंत तक] का सबस्ट्रिंग p से शुरू होता है, तो
- j को 0 से p के आकार तक रेंज में, करें
- bold[i + j] := True
- j को 0 से p के आकार तक रेंज में, करें
- यदि text[इंडेक्स i से अंत तक] का सबस्ट्रिंग p से शुरू होता है, तो
- patterns में प्रत्येक p के लिए, करें
- ans := खाली स्ट्रिंग
- i को 0 से n तक रेंज में, करें
- यदि bold[i] और (i 0 के समान है या bold[i - 1] false है) , तो
- ans := ans concatenate ""
- ans := ans + text[i]
- यदि bold[i] और (i n - 1 के समान है या bold[i + 1] false है) , तो
- ans := ans concatenate ""
- यदि bold[i] और (i 0 के समान है या bold[i - 1] false है) , तो
- ans लौटाएं
बेहतर समझ के लिए निम्न कार्यान्वयन देखें
उदाहरण
class Solution: def solve(self, text, patterns): n = len(text) bold = [False] * n for i in range(n): for p in patterns: if text[i:].startswith(p): for j in range(len(p)): bold[i + j] = True ans = "" for i in range(n): if bold[i] and (i == 0 or not bold[i - 1]): ans += "" ans += text[i] if bold[i] and (i == n - 1 or not bold[i + 1]): ans += "" return ans ob = Solution() text = "thisissampleline" patterns = ["this", "ssam", "sample"] print(ob.solve(text, patterns))
इनपुट
"thisissampleline", ["this", "ssam", "sample"]
आउटपुट
thisissampleline