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

โปรแกรม C++ ค้นหาระยะทางที่สั้นที่สุดไปยังตัวละคร


กำหนดสตริง 'a' และอักขระ 'char' ให้ ภารกิจคือการพิมพ์ระยะห่างของ 'char' จากอักขระแต่ละตัวของสตริงที่กำหนด ขนาดของอาร์เรย์ระยะทางจะเท่ากับขนาดของสตริง เนื่องจากเราต้องหาระยะห่างของอักขระจากอักขระแต่ละตัวของสตริงที่กำหนด

ตัวอย่าง

อินพุต-1:

a = “tutorialspoint”

char = “o”

ผลลัพธ์:

[ 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3]

คำอธิบาย: ในสตริงที่กำหนด ระยะห่างของอักขระจากอักขระแต่ละตัวของสตริงที่กำหนดคือ [3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3]

อินพุต-2:

a = “programmer”

char = “r”

ผลลัพธ์:

[1, 0, 1, 2, 0, 1, 2, 3, 4, 0 ]

คำอธิบาย: ในสตริงที่กำหนด ระยะห่างของ 'r' จากอักขระแต่ละตัวของสตริงที่กำหนดคือ [1, 0, 1, 2, 0, 1, 2, 3, 4, 0]

แนวทางในการแก้ปัญหานี้

แนวทาง Brute Force ในการแก้ปัญหานี้คือการค้นหาตำแหน่งของอักขระที่กำหนดในสตริงและเก็บไว้ในอาร์เรย์ ตอนนี้วนซ้ำทั้งสตริงและอาร์เรย์ตำแหน่งเพื่อค้นหาระยะห่างขั้นต่ำของอักขระในสตริงที่กำหนด

  • ใช้สตริงและอักขระ 'char' เป็นอินพุต
  • ฟังก์ชัน distanceTochar(สตริง a, ถ่าน ch) รับสตริงและอักขระเป็นอินพุต และพิมพ์ระยะห่างของอักขระที่กำหนดจากอักขระแต่ละตัวในสตริงที่กำหนด
  • วนซ้ำสตริง 'a' และเก็บตำแหน่งของอักขระที่กำหนดลงในเวกเตอร์
  • ตอนนี้วนซ้ำบนสตริงและอาร์เรย์ตำแหน่ง และคำนวณระยะห่างของอักขระในสตริง
  • พิมพ์อาร์เรย์ตำแหน่ง

ตัวอย่าง

#include<bits/stdc++.h>
using namespace std;
void shortestToChar(string a, char C) {
   vector < int > pos, dist;
   for (int i = 0; i < a.size(); i++) {
      if (a[i] == C)
         pos.push_back(i);
   }
   for (int i = 0; i < a.size(); i++) {
      int mn = INT_MAX;
      for (int j = 0; j < pos.size(); j++) {
         mn = min(mn, abs(pos[j] - i));
      }
      dist.push_back(mn);
   }
   for (auto i: dist) {
      cout << i << " ";
   }
}
int main() {
   string a = "tutorialspoint";
   char ch {
      'o'
   };
   shortestToChar(a, ch);
}

การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น

ผลลัพธ์

3 2 1 0 1 2 3 3 2 1 0 1 2 3

อักขระ 'o' ในสตริง “tutorialspoint” มีอยู่ที่ดัชนี 3 และดัชนี 10 ดังนั้น หากเราคำนวณระยะทางที่ใกล้ที่สุดจากอักขระก่อนและหลัง เราจะได้ระยะทางเป็น [3 2 1 0 1 2 3 3 2 1 0 1 2 3].