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