एक स्ट्रिंग '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 ] है।
इस समस्या को हल करने का दृष्टिकोण
इस समस्या को हल करने का ब्रूट फोर्स दृष्टिकोण दिए गए कैरेक्टर की स्ट्रिंग में स्थिति ढूंढना और एरे में स्टोर करना है। अब पूरी स्ट्रिंग और पोजीशन एरे पर पुनरावृति करें ताकि दिए गए स्ट्रिंग में कैरेक्टर की न्यूनतम दूरी ढूंढी जा सके।
- एक स्ट्रिंग और एक कैरेक्टर 'char' इनपुट के रूप में लें।
- एक फ़ंक्शन distanceTochar(string a, char 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
स्ट्रिंग "tutorialspoint" में कैरेक्टर 'o' इंडेक्स 3 और इंडेक्स 10 पर मौजूद है। इस प्रकार, यदि हम इसके पहले और बाद के कैरेक्टर्स से इसकी निकटतम दूरी की गणना करते हैं, तो हमें दूरियां [3 2 1 0 1 2 3 3 2 1 0 1 2 3] के रूप में मिलेंगी।