मान लीजिए कि हमारे पास फ़ाइल के लिए एक पूर्ण पथ है (जैसे यूनिक्स फाइल सिस्टम), हमें इसे सरल बनाना होगा। या दूसरे शब्दों में, हमें इसे विहित पथ में बदलना होगा। यूनिक्स-शैली फ़ाइल सिस्टम में, एक अवधि '।' वर्तमान निर्देशिका को संदर्भित करती है। और एक दोहरी अवधि '..' निर्देशिका को एक स्तर (मूल निर्देशिका) तक ले जाती है। विहित पथों के गुण इस प्रकार हैं।
- पथ हमेशा एक स्लैश से शुरू होना चाहिए /
- दो निर्देशिका नामों के बीच केवल एक स्लैश / होना चाहिए।
- अंतिम निर्देशिका नाम (यदि यह मौजूद है) एक अनुगामी / के साथ समाप्त नहीं होना चाहिए।
- कैनोनिकल पथ निरपेक्ष पथ का प्रतिनिधित्व करने वाला सबसे छोटा स्ट्रिंग होना चाहिए।
तो उदाहरण के लिए, यदि दिए गए पथ "/home/", "/../" और "/home//user/" हैं, तो परिवर्तित पथ "/home", "/" और "/home/ उपयोगकर्ता”
आइए चरणों को देखें -
- एक सूची st लें, और उसमें '/' डालें
- a :=दिए गए पथ को सीमांकक '/' से विभाजित करने के बाद स्ट्रिंग्स की एक सूची
- एक में प्रत्येक तत्व के लिए
- अगर मैं डबल पीरियड है, तो
- यदि st> 1 की लंबाई है, तो अंतिम तत्व को st से हटा दें, अन्यथा जारी रखें
- अन्यथा अगर मैं सिंगल पीरियड हूं, तो जारी रखें
- अन्यथा यदि खाली स्ट्रिंग नहीं है, तो st में ('/' concatenate i) डालें
- अगर मैं डबल पीरियड है, तो
- यदि सेंट में केवल एक तत्व है, तो '/' वापस करें
- सेंट में मौजूद सभी तत्वों को संयोजित करने के बाद वापस लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def simplifyPath(self, a): st = ['/'] a = a.split("/") for i in a: if i == '..': if len(st) > 1: st.pop() else: continue elif i == '.': continue elif i != '': st.append("/" + str(i)) if len(st) == 1: return "/" return "".join(st[1:]) ob1 = Solution() print(ob1.simplifyPath("/home/")) print(ob1.simplifyPath("/../")) print(ob1.simplifyPath("/home//user/"))
इनपुट
"/home/" "/../" "/home//user/"
आउटपुट
/home / /home/user