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

পাইথনে ক্যারেক্টার স্ব্যাপ করে দুটি স্ট্রিং সমান করা সম্ভব কিনা চেক করা

দুটি সমান লেংথের লোয়ারকেস স্ট্রিং s এবং t দেওয়া আছে। s-এর এক ক্যারেক্টার এবং t-এর এক ক্যারেক্টার স্ব্যাপ করা যায় (যেকোনো সংখ্যক বার)। দুটি স্ট্রিং সমান করা সম্ভব কিনা চেক করুন।

ইনপুট উদাহরণ

s = "abcd"
t = "cdab"

আউটপুট: True

অ্যালগরিদম

  1. দুই স্ট্রিং কনক্যাট করে (s+t) ফ্রিকোয়েন্সি কাউন্ট করুন।
  2. যদি সব ক্যারেক্টারের ফ্রিকোয়েন্সি ইভেন হয়, তবে True, অন্যথায় False।

পাইথন কোড

from collections import Counter

def solve(s, t):
    fre = Counter(s + t)
    for cnt in fre.values():
        if cnt % 2:
            return False
    return True

# টেস্ট
print(solve("abcd", "cdab"))  # True

ব্যাখ্যা

সোয়াপ অপারেশন দুটি স্ট্রিংয়ের মোট ক্যারেক্টার মাল্টিসেট পরিবর্তন করে না। সমান হলে প্রতিটি ক্যারেক্টার দুটি স্ট্রিংয়ে সমান বার থাকতে হবে → মোট ফ্রিকোয়েন্সি ইভেন।

  1. পাইথনে লিস্টকে দুটি সমান সম হয় এমন প্যার্টিশনে ভাগ করা সম্ভব কিনা চেক করা

  2. পাইথনে দুটি ট্রি নোড স왪 করায় সমান হয় কিনা যাচাই করা (Flip Equivalent Trees)

  3. পাইথনে দুটি স্ট্রিং ০ বা ১ এডিট ডিস্ট্যান্সে আছে কিনা যাচাই করার প্রোগ্রাম

  4. পাইথনে সমান দৈর্ঘ্যের দুটি স্ট্রিংকে ক্যারেক্টার সোয়্যাপ করে সমান করার প্রোগ্রাম