ধরুন আমাদের কাছে N ছোট হাতের অক্ষর স্ট্রিংগুলির একটি অ্যারে আছে, অ্যারের নাম হল A, সমস্ত স্ট্রিং একই দৈর্ঘ্যের। এখন, আমরা মুছে ফেলার সূচকগুলির যেকোনো সেট বেছে নিতে পারি এবং প্রতিটি স্ট্রিংয়ের জন্য, আমরা সেই সূচকগুলির সমস্ত অক্ষর মুছে ফেলি৷
উদাহরণ হিসেবে, যদি আমাদের একটি অ্যারে থাকে যেমন ["abcdef","uvwxyz"] এবং মুছে ফেলার সূচকগুলি {0, 2, 3} হয়, তাহলে মুছে ফেলার পর চূড়ান্ত অ্যারে হবে ["bef", "vyz"], এবং A-এর অবশিষ্ট কলামগুলি হল ["b","v"], ["e","y"], এবং ["f","z"]।
ধরুন আমরা মুছে ফেলার পরে ডিলিট সূচক D এর একটি সেট বেছে নিলাম, A-তে থাকা প্রতিটি কলাম অ-হ্রাস না হওয়া ক্রমানুসারে রয়েছে। আমাদের D এর দৈর্ঘ্যের ন্যূনতম সম্ভাব্য মান খুঁজে বের করতে হবে।
সুতরাং, যদি ইনপুটটি ["cba","daf","ghi"] এর মত হয়, তাহলে আউটপুট হবে 1, এর কারণ হল D ={1} নির্বাচন করার পরে, তারপর প্রতিটি কলাম ["c","d" ,"g"] এবং ["a","f","i"] অ-হ্রাসমান সাজানো ক্রমে রয়েছে। এবং যদি আমরা D ={} বেছে নিই, তাহলে একটি কলাম ["b","a","h"] অ-হ্রাসকৃত ক্রমে হবে না।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- A =অ্যারে থেকে স্ট্রিং নিয়ে একটি ম্যাট্রিক্স তৈরি করুন এবং অক্ষরগুলিকে আলাদা কলামে আলাদা করুন
- B =নতুন খালি তালিকা A-তে col এর জন্য
- করুন
- যদি col ইতিমধ্যেই সাজানো থাকে তাহলে B-তে 0 ঢোকান
- অন্যথায় B-তে 1 ঢোকান
- 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