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

পাইথনে একটি স্ট্রিংকে অন্য স্ট্রিংে রূপান্তর করা (String Transforms Into Another String)

দুটি স্ট্রিং str1 এবং str2 দেওয়া আছে, যাদের দৈর্ঘ্য সমান। আমাদের চেক করতে হবে কি str1-কে str2-তে রূপান্তর করা সম্ভব শূন্য বা অধিক কনভারশন দিয়ে।

একটি কনভারশনে str1-এ থাকা একটি ক্যারেক্টারের সকল~Occurrence কে অন্য যেকোনো लोয়ারকেস ইংরেজি ক্যারেক্টারে রূপান্তর করা যায়। যাচাই করতে হবে রূপান্তর সম্ভব কিনা।

যেমন, str1 = "aabcc", str2 = "ccdee" হলে আউটপুট true, কারণ: 'c'→'e', 'b'→'d', 'a'→'c' রূপান্তর করলে হয়। কনভারশনের ক্রম গুরুত্বপূর্ণ।

সমাধানের ধাপসমূহ
  • compress(s) ফাংশন: স্ট্রিং-এর কনসিকিউটিভ ক্যারেক্টার কাউন্ট করে লিস্ট রিটার্ন করে।

  • canConvert(str1, str2) ফাংশন: দুটি স্ট্রিং কম্প্রেস করে তুলনা করে।

  • ফ্রিকোয়েন্সি ম্যাপ ব্যবহার করে ক্যারেক্টার ম্যাপিং যাচাই করা হয়।

  • শেষে ২৬টি ক্যারেক্টার থেকে ইউনিক ক্যারেক্টার বাদ দিয়ে বাকি আছে কিনা চেক করা হয়।

উদাহরণ (সম্পূর্ণ ইমপ্লিমেন্টেশন)
class Solution(object):
    def compress(self, s):
        n = len(s)
        a = []
        count = 1
        for i in range(1, n):
            if s[i] != s[i-1]:
                a.append(count)
                count = 1
            else:
                count += 1
        a.append(count)
        return a

    def canConvert(self, str1, str2):
        a = self.compress(str1)
        b = self.compress(str2)
        n = len(a)
        m = len(b)
        d = {}
        n = min(n, m)
        i = 0
        while i < n:
            if a[i] > b[i]:
                return False
            i += 1
        for ch in str2:
            if ch not in d:
                d[ch] = 1
        return True if (26 - len(d)) or (str1 == str2) else False

ob = Solution()
print(ob.canConvert("aabcc", "ccdee"))
ইনপুট
"aabcc", "ccdee"
আউটপুট
True
  1. পাইথনে এক স্ট্রিংকে অন্য স্ট্রিংয়ের সাথে যোগ করা

  2. পাইথনে স্ট্রিংয়ের ওপর লজিক্যাল অপারেটর

  3. পাইথনে ক্যারেক্টারের লিস্টকে স্ট্রিংয়ে রূপান্তর করার প্রোগ্রাম

  4. পাইথনে টাপলে অন্য টাপল অ্যাপেন্ড (Append) করা