Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm Khoảng cách ngắn nhất đến một ký tự

Cho một chuỗi 'a' và một ký tự 'char', nhiệm vụ là in khoảng cách của 'char' từ mỗi ký tự của chuỗi đã cho. Kích thước của mảng khoảng cách giống như kích thước của chuỗi, vì chúng ta phải tìm khoảng cách của ký tự từ mỗi ký tự của chuỗi đã cho.

Ví dụ

Đầu vào-1:

a = “tutorialspoint”

char = “o”

Đầu ra:

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

Giải thích: Trong chuỗi đã cho, khoảng cách của ký tự với mỗi ký tự của chuỗi đã cho là [3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3].

Đầu vào-2:

a = “programmer”

char = “r”

Đầu ra:

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

Giải thích: Trong chuỗi đã cho, khoảng cách của 'r' từ mỗi ký tự của chuỗi đã cho là [1, 0, 1, 2, 0, 1, 2, 3, 4, 0].

Phương pháp tiếp cận để giải quyết vấn đề này

Một cách tiếp cận Brute Force để giải quyết vấn đề này là tìm vị trí của ký tự đã cho trong chuỗi và lưu trữ trong mảng. Bây giờ, hãy lặp lại toàn bộ chuỗi cũng như mảng vị trí để tìm khoảng cách tối thiểu của ký tự trong chuỗi đã cho.

  • Lấy một chuỗi và một ký tự 'char' làm đầu vào.
  • Hàm distanceTochar (string a, char ch) nhận một chuỗi và một ký tự làm đầu vào và in ra khoảng cách của ký tự đã cho từ mỗi ký tự trong chuỗi đã cho.
  • Lặp lại chuỗi 'a' và lưu trữ vị trí của ký tự đã cho vào vectơ.
  • Bây giờ, hãy lặp lại chuỗi và mảng vị trí và tính toán khoảng cách của ký tự trong chuỗi.
  • In mảng vị trí.

Ví dụ

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

Chạy đoạn mã trên sẽ tạo ra kết quả là,

Đầu ra

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

Ký tự 'o' trong chuỗi "tutorialspoint" hiện diện ở chỉ mục 3 và chỉ mục 10. Vì vậy, nếu chúng ta tính khoảng cách gần nhất của nó với các ký tự trước và sau nó, chúng ta sẽ nhận được khoảng cách là [3 2 1 0 1 2 3 3 2 1 0 1 2 3].