สมมติว่าเรามีรายการสตริงตัวพิมพ์เล็กที่เรียกว่าคำ ซึ่งแต่ละคำมีความยาวเท่ากัน เราต้องตรวจสอบว่ามี 2 สตริงที่ต่างกันเพียงอักขระเดียวหรือไม่
ดังนั้น หากอินพุตเป็นเหมือนคำ =["seed", "pick", "lick", "root", "live"] ผลลัพธ์จะเป็น True เนื่องจาก "pick" และ "lick" เกือบจะเหมือนกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- s :=ชุดใหม่
- สำหรับแต่ละคำในคำ ทำ
- สำหรับแต่ละดัชนี i และคำ w ในคำ ให้ทำ
- หากสตริงย่อยของ word[จากดัชนี 0 ถึง i - 1] เชื่อม "*" คำต่อกัน[จากดัชนี i + 1 ถึงปลาย] มีอยู่ใน s ดังนั้น
- คืนค่า True
- มิฉะนั้น
- แทรก (คำ[จากดัชนี 0 ถึง i-1] เชื่อม "*" ต่อคำ[จากดัชนี i + 1 ถึงปลาย]) เป็น s
- หากสตริงย่อยของ word[จากดัชนี 0 ถึง i - 1] เชื่อม "*" คำต่อกัน[จากดัชนี i + 1 ถึงปลาย] มีอยู่ใน s ดังนั้น
- สำหรับแต่ละดัชนี i และคำ w ในคำ ให้ทำ
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(words): s = set() for word in words: for i, w in enumerate(word): if word[:i] + "*" + word[i + 1 :] in s: return True else: s.add(word[:i] + "*" + word[i + 1 :]) return False words = ["seed", "pick", "lick", "root", "live"] print(solve(words))
อินพุต
["seed", "pick", "lick", "root", "live"]
ผลลัพธ์
True