การหาระยะห่างน้อยที่สุดระหว่างสองคำในข้อความ
กำหนดข้อความ text และคำ w1, w2 หาระยะห่างน้อยที่สุด (จำนวนคำระหว่าง) ระหว่าง w1 และ w2 ถ้าไม่มีคืน -1
อัลกอริทึม
- แยก text เป็นคำด้วย split()
- เก็บ index ล่าสุดของ w1 (index1) และ w2 (index2)
- วนลูปแต่ละคำพร้อม index
- เจอ w1: ถ้ามี index2 แล้ว คำนวณระยะห่าง = |idx - index2| - 1 อัปเดตค่าน้อยสุด
- เจอ w2: ถ้ามี index1 แล้ว คำนวณระยะห่าง = |idx - index1| - 1 อัปเดตค่าน้อยสุด
- อัปเดต index1 หรือ index2 ตามที่เจอ
- ถ้าพบทั้งคู่ คืนค่าระยะห่างน้อยสุด ไม่เช่นนั้น -1
ตัวอย่างโค้ด
def solve(text, w1, w2):
index1 = None
index2 = None
distance = 2000000
for idx, word in enumerate(text.split(" ")):
if word == w1:
if index2 is not None:
distance = min(distance, abs(idx - index2) - 1)
index1 = idx
if word == w2:
if index1 is not None:
distance = min(distance, abs(idx - index1) - 1)
index2 = idx
if index1 is not None and index2 is not None:
return distance
return -1
text = "joy happy power happy joy joy power happy limit"
w1 = "power"
w2 = "limit"
print(solve(text, w1, w2))
ผลลัพธ์
1
คำอธิบาย
คำว่า "power" และ "limit" มีคำ "happy" อยู่ระหว่างกัน 1 คำ → ระยะห่าง = 1