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(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].