मान लीजिए कि हमारे पास एक स्ट्रिंग s और एक संख्या k है। अब स्ट्रिंग में प्रत्येक वर्ण या तो डॉट ('।') या 'x' है, जहां डॉट एक खाली स्थान को इंगित करता है और 'x' एक व्यक्ति को इंगित करता है। हमें यह जांचना होगा कि क्या खड़े होने के लिए ऐसी स्थिति चुनना संभव है कि हमारे और हमारे सबसे करीबी व्यक्ति के बीच की दूरी कम से कम k हो। (यहाँ प्रत्येक पड़ोसी सूचकांकों के बीच की दूरी 1 है)।
इसलिए, यदि इनपुट s ="x...x..", k =2 जैसा है, तो आउटपुट ट्रू होगा, क्योंकि हम s[2] या s[6] पर खड़े हो सकते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- pos :=s में x का स्थान, यदि मौजूद नहीं है, तो स्थिति -1 होगी
- यदि pos, -1 या pos>=k के समान है, तो
- सही लौटें
- last_x :=pos
- dist_min :=2*k-1
- अनंत लूप करो, करो
- next_x :=सूचकांक last_x+1 से अंत तक x में s का स्थान (यदि x मौजूद नहीं है, तो यह -1 होगा)
- यदि अगला_x -1 के समान नहीं है, तो
- अगर अगला_x-last_x-1>=dist_min, तो
- सही लौटें
- last_x :=next_x
- अगर अगला_x-last_x-1>=dist_min, तो
- अन्यथा,
- यदि s -last_x-1>=k का आकार है, तो
- झूठी वापसी
- यदि s -last_x-1>=k का आकार है, तो
- वापसी शून्य
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, s, k): pos = s.find("x") if pos==-1 or pos>=k: return True last_x = pos dist_min = 2*k-1 while True: next_x = s.find("x", last_x+1) if next_x!=-1: if next_x-last_x-1 >= dist_min: return True last_x = next_x else: if len(s)-last_x-1>=k: return True return False return None ob = Solution() print(ob.solve("x...x..", 2))
इनपुट
"x...x..", 2
आउटपुट
True