สมมติว่าเรามีสตริง s และ t สองสายที่มีความยาวเท่ากัน พิจารณาการดำเนินการที่เราเลือกสองดัชนีในสตริง (ไม่จำเป็นต้องต่างกัน) และสลับอักขระที่ดัชนีที่เลือก เราต้องตรวจสอบว่าเป็นไปได้หรือไม่ที่จะทำให้ทั้งสองสตริงเหมือนกันโดยทำการสลับสตริงอย่างมากที่สุดหนึ่งสตริงกับสตริงใดสตริงหนึ่งเท่านั้น
ดังนั้น หากอินพุตเป็น s ="hello" t ="hlelo" ผลลัพธ์จะเป็น True เพราะเราต้องสลับ 'e' และ 'l' ที่ s หรือ t เพื่อให้เท่ากัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
max_diffs:=2
-
แตกต่าง:=0
-
st :=ชุดใหม่
-
st2 :=ชุดใหม่
-
สำหรับฉันในช่วง 0 ถึงขนาด s ทำ
-
ถ้า s[i] ไม่เหมือนกับ t[i] แล้ว
-
แตกต่าง :=แตกต่าง + 1
-
-
ถ้า s[i] ไม่มีอยู่ใน st แล้ว
-
แทรก s[i] ลงใน st
-
-
ถ้า t[i] ไม่มีอยู่ใน st2 แล้ว
-
ใส่ t[i] ลงใน st2
-
-
ถ้า diffs> max_diffs แล้ว
-
คืนค่าเท็จ
-
-
-
คืนค่า true ถ้า (diffs เหมือนกับ 0 หรือ diffs เหมือนกับ 2) และขนาดของ st เท่ากับขนาดของ 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