একই দৈর্ঘ্যের দুটি স্ট্রিং s এবং t দেওয়া আছে। একটি অপারেশনে আমরা একটি স্ট্রিং-এ দুটি ইনডেক্স বেছে নিয়ে সেগুলো সোয়্যাপ করতে পারি। আমাদের কাজ হলো শুধু একটি স্ট্রিং-এ সর্বোচ্চ একবার সোয়্যাপ করে দুটি স্ট্রিং সমান করা সম্ভব কিনা যাচাই করা।
যেমন, s = "hello", t = "hlelo" হলে আউটপুট True। কারণ 'e' এবং 'l' সোয়্যাপ করলে সমান হয়।
সমাধানের ধাপসমূহ
- max_diffs := 2, diffs := 0
- st := খালি সেট, st2 := খালি সেট
- i = 0 থেকে s-এর দৈর্ঘ্য পর্যন্ত লুপ:
- যদি s[i] != t[i], তবে diffs বাড়ান।
- s[i] st-এ নেই তবে যোগ করুন।
- t[i] st2-এ নেই তবে যোগ করুন।
- যদি diffs > max_diffs হয়, তবে False ফেরত দিন।
- ফেরত দিন: (diffs == 0 বা diffs == 2) এবং len(st) == len(st2) এবং st == st2
উদাহরণ
def solve(s, t):
max_diffs = 2
diffs = 0
st = set()
st2 = set()
for i in range(len(s)):
if s[i] != t[i]:
diffs += 1
if s[i] not in st:
st.add(s[i])
if t[i] not in st2:
st2.add(t[i])
if diffs > max_diffs:
return False
return (diffs == 0 or diffs == 2) and len(st) == len(st2) and st == st2
s = "hello"
t = "hlelo"
print(solve(s, t))
ইনপুট
"hello", "hlelo"
আউটপুট
True