Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ระยะห่างของคำที่สั้นที่สุด III ใน C ++


สมมติว่าเรามีรายการคำและอีกสองคำที่เรียกว่า 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