দুটি সমান লেংথের লোয়ারকেস স্ট্রিং s এবং t দেওয়া আছে। s-এর এক ক্যারেক্টার এবং t-এর এক ক্যারেক্টার স্ব্যাপ করা যায় (যেকোনো সংখ্যক বার)। দুটি স্ট্রিং সমান করা সম্ভব কিনা চেক করুন।
ইনপুট উদাহরণ
s = "abcd"
t = "cdab"
আউটপুট: True
অ্যালগরিদম
- দুই স্ট্রিং কনক্যাট করে (
s+t) ফ্রিকোয়েন্সি কাউন্ট করুন। - যদি সব ক্যারেক্টারের ফ্রিকোয়েন্সি ইভেন হয়, তবে
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
ব্যাখ্যা
সোয়াপ অপারেশন দুটি স্ট্রিংয়ের মোট ক্যারেক্টার মাল্টিসেট পরিবর্তন করে না। সমান হলে প্রতিটি ক্যারেক্টার দুটি স্ট্রিংয়ে সমান বার থাকতে হবে → মোট ফ্রিকোয়েন্সি ইভেন।