মান লেই আমাদের N সংখ্যক লোয়ারকেস লেটার স্ট্রিংয়ের একটি অ্যারে আছে, অ্যারে নাম A, সব স্ট্রিংয়ের দৈর্ঘ্য একই। এখন, আমরা যেকোনো সেট ডিলিশন ইন্ডেক্স বেছে নিতে পারি, এবং প্রতিটি স্ট্রিংয়ের জন্য, আমরা সেসব ইন্ডেক্সের সব ক্যারেক্টার ডিলিট করব।
উদাহরণস্বরূপ, যদি A = ["abcdef","uvwxyz"] এবং ডিলিশন ইন্ডেক্স হয় {0, 2, 3}, তবে ডিলিশনের পর ফাইনাল অ্যারে হবে ["bef", "vyz"], এবং A-এর বাকি কলামগুলো হবে ["b","v"], ["e","y"], এবং ["f","z"]।
মান লেই আমরা ডিলিশন ইন্ডেক্সের একটি সেট D বেছে নিই যাতে ডিলিশনের পর, A-এর প্রতিটি বাকি কলাম নন-ডিক্রিজিং সর্টেড অর্ডারে থাকে। আমাদের D-এর দৈর্ঘ্যের মিনিমাম পসিবল ভ্যালু বের করতে হবে।
সেজন্য, যদি ইনপুট হয় ["cba","daf","ghi"], তবে আউটপুট হবে ১, কারণ D = {1} বেছে নিলে প্রতিটি কলাম ["c","d","g"] এবং ["a","f","i"] নন-ডিক্রিজিং সর্টেড অর্ডারে থাকে। আর যদি D = {} বেছে নেই, তবে কলাম ["b","a","h"] নন-ডিক্রিজিং সর্টেড অর্ডারে থাকবে না।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −
- A = অ্যারে থেকে স্ট্রিং নিয়ে ম্যাট্রিক্স বানান, ক্যারেক্টার আলাদা কলামে
- B = নতুন খালি লিস্ট
- প্রতিটি col A-তে,
- যদি col ইতিমধ্যে সর্টেড হয়, তবে B-তে ০ ইনসার্ট
- অন্যথায় B-তে ১ ইনসার্ট
- B-এর সব এলিমেন্টের সমষ্টি রিটার্ন
বেস্টার বোঝার জন্য নিচের ইম্প্লিমেন্টেশন দেখুন −
উদাহরণ
class Solution:
def minDeletionSize(self, A):
return sum([1 - (sorted(col) == list(col)) for col in zip(*A)])
ob = Solution()
print(ob.minDeletionSize(["cba","daf","ghi"]))
ইনপুট
["cba","daf","ghi"]
আউটপুট
1