मान लीजिए कि हमारे पास एक लोअरकेस स्ट्रिंग है; हमें यह जांचना होगा कि क्या हम स्ट्रिंग को बीच से विभाजित कर सकते हैं जो दो पक्षों के बीच कम से कम एक वर्ण के अंतर वाले दो हिस्सों को देगा। इसमें अलग-अलग वर्ण या प्रत्येक वर्ण की अलग-अलग आवृत्ति हो सकती है। यदि स्ट्रिंग विषम लंबाई वाली स्ट्रिंग है, तो मध्य तत्व को अनदेखा करें और शेष तत्वों की जांच करें।
इसलिए, यदि इनपुट s ="helloohekk" जैसा है, तो आउटपुट "helloohekk" के रूप में True होगा, इसलिए बायां भाग "hello" है, दायां भाग "ohekk" है, बाएँ और दाएँ अलग हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- left_freq :=एक खाली नक्शा
- right_freq:=एक खाली नक्शा
- n :=आकार का
- i के लिए 0 से लेकर (n/2) -1 के भागफल तक, do
- left_freq[s[i]] :=left_freq[s[i]] + 1
- i के लिए (n/2) से n-1 के श्रेणी भागफल में, do
- right_freq[s[i]] :=right_freq[s[i]] + 1
- एस में प्रत्येक चार के लिए, करें
- यदि right_freq[char], left_freq[char] के समान नहीं है, तो
- सही लौटें
- यदि right_freq[char], left_freq[char] के समान नहीं है, तो
- झूठी वापसी
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from collections import defaultdict def solve(s): left_freq = defaultdict(int) right_freq = defaultdict(int) n = len(s) for i in range(n//2): left_freq[s[i]] += 1 for i in range(n//2, n): right_freq[s[i]] += 1 for char in s: if right_freq[char] != left_freq[char]: return True return False s = "helloohekk" print(solve(s))
इनपुट
"helloohekk"
आउटपुट
True