मान लीजिए एक एन्कोडेड स्ट्रिंग S दी गई है। हमें डिकोडेड स्ट्रिंग को टेप पर ढूंढना और लिखना है, यहां एन्कोडेड स्ट्रिंग को एक समय में एक वर्ण पढ़ा जाता है और निम्न चरण किए जाते हैं -
- यदि पढ़ा गया वर्ण एक अक्षर है, तो उस अक्षर को टेप पर लिखा जाता है।
- यदि पढ़ा गया वर्ण एक अंक है, तो वर्तमान टेप को अंक - 1 बार कुल मिलाकर बार-बार लिखा जाता है।
अब यदि कुछ एन्कोडेड स्ट्रिंग S, और एक इंडेक्स K दिया गया है, तो डिकोडेड स्ट्रिंग में K-वां अक्षर (इंडेक्स 1 से शुरू) ढूंढें और लौटाएं।
इसलिए यदि स्ट्रिंग "hello2World3" है और k = 10, तो आउटपुट "o" होगा। ऐसा इसलिए है क्योंकि डिकोडेड स्ट्रिंग "hellohelloWorldhellohelloWorldhellohelloWorld" होगी, इसलिए 10वां वर्ण "o" है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- size := 0
- स्ट्रिंग s में i के लिए
- यदि i एक संख्यात्मक वर्ण है, तो size := size * i का पूर्णांक रूप, अन्यथा size := size + 1
- i के लिए s की लंबाई - 1 से 0 तक नीचे की रेंज में
- k := k mod size
- यदि s[i] संख्यात्मक है और k = 0, तो s[i] लौटाएं
- यदि s[i] संख्यात्मक है, तो size को 1 से घटाएं, अन्यथा size := size / s[i] का पूर्णांक
- खाली स्ट्रिंग लौटाएं
उदाहरण
class Solution(object):
def decodeAtIndex(self, s, k):
size = 0
for i in s:
if i.isdigit():
size *= int(i)
else:
size += 1
for i in range(len(s) - 1, -1, -1):
k %= size
if s[i].isalpha() and k == 0:
return s[i]
if s[i].isalpha():
size -= 1
else:
size /= int(s[i])
return ""
ob = Solution()
print(ob.decodeAtIndex("hello2World3", 10))
इनपुट
"hello2World3" 10 ob.decodeAtIndex("hello2World3", 10)
आउटपुट
o