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

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


สมมติว่าเรามีรายการคำ และอีกสองคำคือ word1 และ word2 เราต้องหาระยะทางสั้นที่สุดระหว่างสองคำนี้ในรายการ word1 และ word2 อาจเป็นคำเดียวกันก็ได้ และแสดงถึงคำสองคำที่ต่างกันในรายการ

ตัวอย่าง: words = ["practice", "makes", "perfect", "skill", "makes"], word1 = "makes", word2 = "skill" ผลลัพธ์ = 1

วิธีแก้ปัญหา

  1. เก็บตำแหน่งล่าสุดของ word1 (l1) และ word2 (l2)
  2. วนลูปผ่านรายการคำ:
    • ถ้าเจอ word1 อัปเดต l1
    • ถ้าเจอ word2 อัปเดต l2 (ถ้า word1==word2 ให้ l1 = l2 ก่อน)
    • คำนวณระยะทาง |l2 - l1| และอัปเดตค่าต่ำสุด
  3. คืนค่าระยะทางต่ำสุด

ตัวอย่างโค้ด C++

#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; 
    } 
}; 

int 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