मान लीजिए हमारे पास एक स्ट्रिंग s और एक संख्या k है। अब स्ट्रिंग में प्रत्येक वर्ण या तो डॉट ('.') या 'x' है, जहां डॉट एक खाली स्थान को इंगित करता है और 'x' एक व्यक्ति को इंगित करता है। हमें जांचना है कि क्या ऐसी स्थिति चुनना संभव है जिस पर खड़े होकर हमारे और हमारे निकटतम व्यक्ति के बीच की दूरी कम से कम k हो। (यहां प्रत्येक पड़ोसी सूचकांकों के बीच की दूरी 1 है)।
उदाहरण के लिए, यदि इनपुट है s = "x...x..", k = 2, तो आउटपुट होगा True, क्योंकि हम s[2] या s[6] पर खड़े हो सकते हैं।
इसे हल करने के लिए, हम निम्नলিখিত चरणों का पालन করेंगे:
- pos := s में x का स्थान, यदि मौजूद नहीं है, तो pos -1 होगा
- यदि pos, -1 के समान है या pos >= k, तो
- True वापस करें
- last_x := pos
- dist_min := 2*k-1
- अनंत लूप करें, करें
- next_x := s में last_x+1 से अंत तक x का स्थान (यदि x मौजूद नहीं है, तो यह -1 होगा)
- यदि next_x, -1 के समान नहीं है, तो
- यदि next_x-last_x-1 >= dist_min, तो
- True वापस करें
- last_x := next_x
- यदि next_x-last_x-1 >= dist_min, तो
- अन्यथा,
- यदि s का आकार -last_x-1 >= k, तो
- False वापस करें
- यदि s का आकार -last_x-1 >= k, तो
- null वापस करें
বेहतर বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখুন:
উদাহরণ
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