ধরুন আমাদের কাছে একটি ফাইলের জন্য একটি পরম পথ আছে (যেমন ইউনিক্স ফাইল সিস্টেম), আমাদের এটিকে সরল করতে হবে। বা অন্য কথায়, আমাদের এটিকে ক্যানোনিকাল পাথে রূপান্তর করতে হবে। UNIX-শৈলী ফাইল সিস্টেমে, একটি সময়কাল '.' বর্তমান ডিরেক্টরিকে বোঝায়। এবং একটি ডবল পিরিয়ড '..' ডিরেক্টরিটিকে একটি স্তরের উপরে নিয়ে যায় (প্যারেন্ট ডিরেক্টরি)। ক্যানোনিকাল পাথের বৈশিষ্ট্যগুলি নিম্নরূপ।
- পথ সর্বদা একটি স্ল্যাশ দিয়ে শুরু করতে হবে /
- দুটি ডিরেক্টরি নামের মধ্যে শুধুমাত্র একটি স্ল্যাশ / থাকতে হবে।
- সর্বশেষ ডিরেক্টরির নাম (যদি এটি বিদ্যমান থাকে) অবশ্যই একটি ট্রেলিং দিয়ে শেষ হবে না।
- ক্যাননিকাল পাথটি অবশ্যই পরম পথের প্রতিনিধিত্বকারী ক্ষুদ্রতম স্ট্রিং হতে হবে৷
সুতরাং উদাহরণস্বরূপ, যদি প্রদত্ত পাথগুলি হয় “/home/”, “/../” এবং “/home//user/”, তাহলে রূপান্তরিত পাথগুলি হল “/home”, “/”, এবং “/home/” ব্যবহারকারী"
আসুন ধাপগুলো দেখি -
- একটি তালিকা নিন এবং এতে '/' রাখুন
- a :=প্রদত্ত পাথকে ডিলিমিটার দিয়ে বিভক্ত করার পরে স্ট্রিংগুলির একটি তালিকা '/'
- প্রতিটি উপাদানের জন্য আমি একটি
- এ
- যদি আমি ডবল পিরিয়ড হয়, তাহলে
- যদি st> 1 এর দৈর্ঘ্য হয়, তাহলে st থেকে শেষ উপাদান মুছে দিন, অন্যথায় চালিয়ে যান
- অন্যথায় আমি যদি একক পিরিয়ড হই, তাহলে চালিয়ে যান
- অন্যথায় যদি খালি স্ট্রিং না হয়, তাহলে ঢোকান ('/' কনক্যাটেনেট i) st এ
- যদি আমি ডবল পিরিয়ড হয়, তাহলে
- যদি st শুধুমাত্র একটি উপাদান থাকে, তাহলে '/' ফেরত দিন
- st-এ উপস্থিত সমস্ত উপাদান একত্রিত করার পরে ফিরে আসুন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
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