Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 문자열에서 마지막으로 반복되지 않는 문자 찾기

<시간/>

문자열 str이 있다고 가정합니다. 그 안에서 반복되지 않는 마지막 문자를 찾아야 합니다. 따라서 입력 문자열이 "프로그래밍"과 같은 경우. 따라서 첫 번째 비반복 문자는 'n'입니다. 해당 문자가 없으면 -1을 반환합니다.

하나의 주파수 배열을 만들어 이를 해결할 수 있습니다. 이것은 주어진 문자열의 각 문자의 빈도를 저장합니다. 빈도가 업데이트되면 마지막 문자부터 하나씩 문자열 탐색을 시작합니다. 그런 다음 저장된 빈도가 1인지 확인하고 1이면 반환하고 그렇지 않으면 이전 문자로 이동합니다.

예시

#include <iostream>
using namespace std;
const int MAX = 256;
static string searchNonrepeatChar(string str) {
   int freq[MAX] = {0};
   int n = str.length();
   for (int i = 0; i < n; i++)
      freq[str.at(i)]++;
   for (int i = n - 1; i >= 0; i--) {
      char ch = str.at(i);
      if (freq[ch] == 1) {
         string res;
         res+=ch;
         return res;
      }
   }
   return "-1";
}
int main() {
   string str = "programming";
   cout<< "Last non-repeating character: " << searchNonrepeatChar(str);
}

출력

Last non-repeating character: n