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

পাইথনে স্ট্রিংর গ্রেটেস্ট কমন ডিভাইজর (Greatest Common Divisor of Strings in Python)


সমস্যা বিবরণ

দুটি স্ট্রিং A এবং B দেওয়া আছে। A, B দিয়ে বিভাজ্য যদি A = B + B + ... (এক বা একাধিকবার) হয়। দুটি স্ট্রিংর সবচোয়ে বড় কমন ডিভাইজর (GCD স্ট্রিং) বের করতে হবে।

উদাহরণ: "ABABAB" এবং "ABAB" → GCD = "AB"। কারণ "AB"+"AB"+"AB" = "ABABAB" এবং "AB"+"AB" = "ABAB"।

সমাধানের পদ্ধতি

  1. ছোট স্ট্রিংটিকে temp ধরে রাখুন।
  2. temp-এর সব সম্ভাব্য প্রিফিক্স (লেন্থ ১ থেকে len(temp)) চেক করুন।
  3. প্রিফিক্সটি যদি দুটি স্ট্রিংই তৈরি করতে পারে (রিপিট করে), তবে সেটি ক্যান্ডিডেট।
  4. সবচোয়ে বড় ক্যান্ডিডেট ফেরত দিন।

পাইথন উদাহরণ

class Solution(object):
    def gcdOfStrings(self, str1, str2):
        if len(str1) <= len(str2):
            temp = str1
        else:
            temp = str2
        
        m = len(temp)
        res = [""]
        for x in range(1, m + 1):
            if m % x == 0:
                candidate = temp[:x]
                if candidate * (len(str1) // x) == str1 and candidate * (len(str2) // x) == str2:
                    res.append(candidate)
        return res[-1]

ob1 = Solution()
print(ob1.gcdOfStrings("ABABAB", "ABAB"))

ইনপুট

"ABABAB" "ABAB"

আউটপুট

AB

গাণিতিক পদ্ধতি (O(n+m)) - ইউক্লিডিয়ান অ্যালগরিদম

def gcdOfStrings(str1, str2):
    # GCD স্ট্রিং আছে কিনা চেক: str1+str2 == str2+str1 হলে মাত্র
    if str1 + str2 != str2 + str1:
        return ""
    
    # স্ট্রিং লেন্থের GCD বের করুন
    from math import gcd
    gcd_len = gcd(len(str1), len(str2))
    return str1[:gcd_len]
  1. পাইথন প্রোগ্রাম - দুটি স্ট্রিংয়ের কমন ওয়ার্ড সরিয়ে আনকমন ওয়ার্ড বের করা

  2. পাইথন - সুপারসিকোয়েন্স স্ট্রিং ফিল্টার করুন

  3. পাইথন - ম্যাট্রিক্সে সবচেয়ে সাধারণ কম্বিনেশন খুঁজুন

  4. এক্সেলে লোয়েস্ট কমন মাল্টিপল (LCM) এবং গ্রেটেস্ট কমন ডিভাইজার (GCD) বের করা