문자열 '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].