สมมติว่าเรามีรายการคำและอีกสองคำที่เรียกว่า word1 และ word2 เราต้องหาระยะห่างระหว่างสองคำนี้ที่สั้นที่สุดในรายการ ที่นี่ word1 และ word2 อาจเหมือนกันและเป็นตัวแทนของคำสองคำในรายการ ให้เราถือว่าคำ =["ฝึกฝน", "ทำ", "สมบูรณ์แบบ", "ทักษะ", "ทำ"].
ดังนั้น หากอินพุตเป็นเหมือน word1 =“makes”, word2 =“skill” ผลลัพธ์จะเป็น 1
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
ย้อน :=10^9, l1 :=10^9, l2 :=-10^9
-
n :=ขนาดของคำ
-
สำหรับการเริ่มต้น i :=0 เมื่อ i
-
ถ้า word[i] เหมือนกับ word1 แล้ว −
-
l1 :=ผม
-
-
ถ้า word[i] เหมือนกับ word2 แล้ว −
-
ถ้า word1 เหมือนกับ word2 แล้ว −
-
l1 :=l2
-
-
l2 :=ผม
-
-
ret :=ขั้นต่ำของ |l2 - l1| และพักผ่อน
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; class Solution { public: int shortestWordDistance(vector<string<& words, string word1, string word2) { int ret = 1e9; int l1 = 1e9; int l2 = -1e9; int n = words.size(); for (int i = 0; i < n; i++) { if (words[i] == word1) { l1 = i; } if (words[i] == word2) { if (word1 == word2) { l1 = l2; } l2 = i; } ret = min(abs(l2 - l1), ret); } return ret; } }; main(){ Solution ob; vector<string< v = {"practice", "makes", "perfect", "skill", "makes"}; cout << (ob.shortestWordDistance(v, "makes", "skill")); }
อินพุต
{"practice", "makes", "perfect", "skill", "makes"},"makes", "skill"
ผลลัพธ์
1