मान लीजिए कि एक एन्कोडेड स्ट्रिंग S दिया गया है। हमें डिकोडेड स्ट्रिंग को एक टेप में ढूंढना और लिखना है, यहां एन्कोडेड स्ट्रिंग को एक बार में एक वर्ण पढ़ा जाता है और निम्नलिखित चरणों का पालन किया जाता है -
- यदि पढ़ा गया अक्षर एक अक्षर है, तो वह अक्षर केवल टेप पर लिखा जाता है।
- यदि पढ़ा गया वर्ण एक अंक है, तो संपूर्ण वर्तमान टेप को बार-बार अंक लिखा जाता है - कुल मिलाकर 1 बार।
अब अगर कुछ एन्कोडेड स्ट्रिंग S, और एक इंडेक्स K दिया गया है, तो डिकोड किए गए स्ट्रिंग में K-वें अक्षर (1 से शुरू होने वाले इंडेक्स) को ढूंढें और वापस करें।
इसलिए यदि स्ट्रिंग "hello2World3" और k =10 है, तो आउटपुट "o" होगा। ऐसा इसलिए है क्योंकि डिकोड की गई स्ट्रिंग "hellohelloWorldhellohelloWorldhellohelloWorld" होगी, इसलिए 10वां वर्ण "o" है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- आकार:=0
- के लिए मैं स्ट्रिंग एस में
- यदि मैं एक संख्यात्मक वर्ण है, तो आकार:=आकार * मैं से पूर्णांक, अन्यथा आकार:=आकार + 1
- i के लिए s – 1 की सीमा लंबाई में 0 से 0
- . तक
- k :=k मॉड आकार
- यदि s[i] सांख्यिक है और k =0 है, तो s[i] . लौटाएं
- यदि s[i] सांख्यिक है, तो आकार 1 से घटाएं, अन्यथा आकार :=आकार / s[i] का पूर्णांक
- खाली स्ट्रिंग लौटाएं
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution(object): def decodeAtIndex(self, s, k): """ :type S: str :type K: int :rtype: str """ size = 0 for i in s: if i.isdigit(): size *= int(i) else: size += 1 #print(size) 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