মান লেই আমাদের লগসের একটি অ্যারে আছে। এই অ্যারে প্রতিটি এন্ট্রি হলো স্পেস-ডিলিমিটেড স্ট্রিং অফ ওয়ার্ডস। প্রতিটি লগের প্রথম ওয়ার্ড হলো একটি অ্যালফানিউমেরিক আইডেন্টিফায়ার। তারপর, দুটি টাইপের স্ট্রিং থাকে নিচের মত −
- আইডি এর পরের প্রতিটি ওয়ার্ড শুধু লোয়ারকেস লেটার দিয়ে গঠিত;
- আইডি এর পরের প্রতিটি ওয়ার্ড শুধু ডিজিট দিয়ে গঠিত।
আমরা এই দুটি টাইপের লগকে লেটার-লগ এবং ডিজিট-লগ বলব। এবং প্রতিটি লগে কমপক্ষে একটি ওয়ার্ড আইডির পর থাকতে হবে।
আমাদের লগগুলো রি-অর্ডার করতে হবে যাতে সব লেটার-লগ ডিজিট-লগের আগে থাকে। এবং লেটার-লগগুলো লেক্সিকোগ্রাফিক্যালি অর্ডারড থাকবে আইডেন্টিফায়ার ইগ্নোর করে, টাই হলে আইডেন্টিফায়ার ব্যবহার হবে। ফাইনালি, ডিজিট-লগগুলো তাদের আর্গিনাল অর্ডারে থাকবে। ফাইনাল অর্ডার রিটার্ন করতে হবে।
সেজন্য, যদি ইনপুট হয় logs = ["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"], তবে আউটপুট হবে ["let1 art can","let3 art zero","let2 own kit dig","dig1 9 2 5 2","dig2 4 8"]
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −
- words := একটি নতুন লিস্ট
- nums := একটি নতুন লিস্ট
- প্রতিটি log logs-এ,
- s := log-এর ওয়ার্ড লিস্ট
- যদি দ্বিতীয় ওয়ার্ড ডিজিট হয়, তবে
- log nums-এ অ্যাপেন্ড
- অন্যথায়,
- s-এর সব এলিমেন্ট স্পেস দিয়ে জড়িয়ে words-এ অ্যাপেন্ড
- words = words লিস্টকে লেক্সিকোগ্রাফিক্যালি সর্ট
- words := words এর সব এলিমেন্ট স্পেস দিয়ে জড়িয়ে স্ট্রিং লিস্ট বানান
- words এবং nums মার্জ করে রিটার্ন
বেস্টার বোঝার জন্য নিচের ইম্প্লিমেন্টেশন দেখুন −
উদাহরণ
class Solution:
def reorderLogFiles(self, logs):
words = []
nums = []
for log in logs:
s = log.split()
if s[1].isdigit():
nums.append(log)
else:
words.append((s[0], ' '.join(s[1:])))
words = sorted(words, key=lambda x: (x[1], x[0]))
words = [' '.join(w) for w in words]
return words + nums
ob = Solution()
print(ob.reorderLogFiles(["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]))
ইনপুট
["dig1 9 2 5 2","let1 art can","dig2 4 8","let2 own kit dig","let3 art zero"]
আউটপুট
['let1 art can', 'let3 art zero', 'let2 own kit dig', 'dig1 9 2 5 2', 'dig2 4 8']