Giả sử chúng ta có ba chuỗi text, w1, và w2. text là một câu với các từ khác nhau. Chúng ta phải tìm khoảng cách nhỏ nhất giữa hai lần xuất hiện bất kỳ của w1 và w2 trong text, khoảng cách được đo bằng số từ ở giữa chúng. Nếu w1 hoặc w2 không có trong text, trả về -1.
Vì vậy, nếu đầu vào là text = "joy happy power happy joy joy power happy limit" w1 = "power" w2 = "limit", thì đầu ra sẽ là 1, vì chỉ có một từ "happy" ở giữa power và limit.
Để giải quyết vấn đề này, chúng ta sẽ làm theo các bước sau:
index1 := null, index2 := null
distance := 999999
với mỗi chỉ số idx và từ w trong text, thực hiện
nếu w giống w1, thì
nếu index2 không phải null, thì distance := min(distance, |idx - index2| - 1)
index1 := idx
nếu w giống w2, thì
nếu index1 không phải null, thì distance := min(distance, |idx - index1| - 1)
index2 := idx
nếu index1 không null và index2 không null, thì trả về distance
trả về -1
Ví dụ
Hãy xem triển khai sau để hiểu rõ hơn:
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))
Đầu vào
"joy happy power happy joy joy power happy limit", "power", "limit"
Đầu ra
1