สมมติว่าเรามีสองสตริง s และ t เราต้องตรวจสอบว่าระยะการแก้ไขระหว่าง s และ t เป็นหนึ่งเดียวหรือไม่ การแก้ไขระหว่างสองสตริงหมายถึงหนึ่งในสามนี้ -
- ใส่อักขระ
- ลบอักขระ
- แทนที่อักขระ
ดังนั้น หากอินพุตเป็น s ="hello" t ="heillo" ผลลัพธ์จะเป็น True เนื่องจากเราต้องแทรกอักขระหนึ่งตัวลงใน s เพื่อให้ได้ t
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า |ขนาด s - ขนาดของ t|> 1 แล้วก็
- คืนค่าเท็จ
- edit_dist_cnt :=0, i :=0, j :=0
- ในขณะที่ฉัน <ขนาดของ s และ j <ขนาดของ t ทำ
- ถ้า s[i] ไม่เหมือนกับ t[j] แล้ว
- ถ้า edit_dist_cnt เหมือนกับ 1 แล้ว
- คืนค่าเท็จ
- ถ้าขนาดของ s> ขนาดของ t แล้ว
- ผม :=ผม + 1
- มิฉะนั้น เมื่อขนาดของ s <ขนาดของ t แล้ว
- j :=j + 1
- มิฉะนั้น
- i :=i + 1, j :=j + 1
- edit_dist_cnt :=edit_dist_cnt + 1
- ถ้า edit_dist_cnt เหมือนกับ 1 แล้ว
- มิฉะนั้น
- i :=i + 1, j :=j + 1
- ถ้า s[i] ไม่เหมือนกับ t[j] แล้ว
- ถ้าฉัน <ขนาดของ s หรือ j <ขนาดของ t แล้ว
- edit_dist_cnt :=edit_dist_cnt + 1
- คืนค่า จริง เมื่อ edit_dist_cnt เหมือนกับ 1 มิฉะนั้น จะเป็นเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(s, t): if abs(len(s) - len(t)) > 1: return false edit_dist_cnt = 0 i = 0 j = 0 while i < len(s) and j < len(t): if s[i] != t[j]: if edit_dist_cnt == 1: return false if len(s) > len(t): i += 1 elif len(s) < len(t): j += 1 else: i += 1 j += 1 edit_dist_cnt +=1 else: i += 1 j += 1 if i < len(s) or j < len(t): edit_dist_cnt += 1 return edit_dist_cnt == 1 s = "hello" t = "heillo" print(solve(s, t))
อินพุต
"hello", "heillo"
ผลลัพธ์
True