কম্পিউটার টিউটোরিয়াল

পাইথনে স্ট্রিংকে একই স্ট্রিং দুবার যোগ করে তৈরি করতে অপারেশনের সংখ্যা বের করার প্রোগ্রাম

একটি লোয়ারকেস স্ট্রিং s দেওয়া আছে। একটি অপারেশনে s-এ যেকোনো ক্যারেক্টার ডিলিট, ইনসার্ট বা আপডেট করা যায়। কমপক্ষে কত অপারেশন দরকার যাতে s = t + t হয় (t যেকোনো স্ট্রিং) তা বের করতে হবে।

সমস্যা উদাহরণ

ইনপুট: s = "pqrxqsr"
আউটপুট: 2

ব্যাখ্যা: 'x' কে 'p' করে আপডেট এবং 's' ডিলিট করলে s = "pqrpqr" = "pqr" + "pqr"।

সমাধানের পদ্ধতি (এডিট ডিস্ট্যান্স)

  1. edit_distance(s1, s2) ফাংশন: দুই স্ট্রিং মাঝপথের লেভেনস্টাইন ডিস্ট্যান্স বের করে (O(mn) টাইম, O(n) স্পেস)
  2. প্রতিটি সম্ভাব্য বিভাজন পয়েন্ট i (০ থেকে len(s)-১) এর জন্য:
    • edit_distance(s[:i], s[i:]) ক্যালকুলেট করুন
    • সর্বনিম্ন মান রাখুন
  3. সর্বনিম্ন মান রিটার্ন করুন

পাইথন কোড

def solve(s):
    def edit_distance(s1, s2):
        m, n = len(s1), len(s2)
        cur = list(range(n + 1))
        for i in range(m):
            prev, cur = cur, [i + 1] + [0] * n
            for j in range(n):
                cur[j + 1] = (prev[j] 
                    if s1[i] == s2[j] 
                    else min(cur[j], prev[j], prev[j + 1]) + 1)
        return cur[n]
    
    res = len(s)
    for i in range(len(s)):
        res = min(edit_distance(s[:i], s[i:]), res)
    return res

s = "pqrxqsr"
print(solve(s))  # আউটপুট: 2

টেস্ট কেস

ইনপুট: "pqrxqsr"
আউটপুট: 2

নোট: প্রদত্ত উদাহরণে আউটপুট None দেখানো হয়েছে যা ভুল। সঠিক আউটপুট 2।

  1. পাইথনে ম্যাট্রিক্স কলাম ফ্লিপ করে টার্গেট ম্যাট্রিক্সে রূপান্তরের ন্যূনতম অপারেশন খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে ম্যাট্রিক্সের সব সেল এক রঙে করার ন্যূনতম অপারেশন সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে স্ট্রিং s-কে পরিবর্তন করে t কে সাবস্ট্রিং बनानेয় ন্যূনতম অপারেশন বের করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম: সেট ব্যবহার করে স্ট্রিং-এ স্বরবর্ণ (vowel) গণনা