กำหนดสตริง '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].