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

C++를 사용하여 주어진 문자열에서 첫 번째 고유 문자의 인덱스 찾기

<시간/>

문자열 's'가 주어지면 작업은 주어진 문자열에서 반복되지 않는 첫 번째 고유 문자를 찾고 해당 인덱스를 출력으로 반환하는 것입니다. 주어진 문자열에 그러한 문자가 없으면 출력으로 '-1'을 반환합니다. 예를 들어,

입력-1 -

s = “tutorialspoint”

출력 -

1

설명 - 주어진 문자열 "tutorialspoint"에서 반복되지 않는 첫 번째 고유 문자는 인덱스 '1'을 갖는 'u'입니다. 따라서 '1'을 출력으로 반환합니다.

입력-2 -

s = “aaasttarrs”

출력 -

-1

설명 − 주어진 문자열 "aaasttarrs'에는 고유한 문자가 없습니다. 따라서 출력을 '-1'로 반환합니다.

이 문제를 해결하는 데 사용된 접근 방식

주어진 문자열에 있는 첫 번째 고유 문자의 인덱스를 찾으려면 해시맵을 사용할 수 있습니다. . 아이디어는 문자열의 모든 문자를 살펴보고 Key를 문자로, Value를 해당 항목으로 사용하여 해시맵을 만드는 것입니다.

문자열의 각 문자를 탐색하는 동안 각 문자가 나타나면 해당 문자의 발생을 저장합니다. 각 문자의 발생을 저장하는 데 O(n) 선형 시간이 걸립니다. 그런 다음 해시맵을 살펴보고 빈도가 2보다 작거나 '1'과 같은 문자가 있는지 확인합니다. 그리고 우리는 그 특정 문자의 인덱스를 반환할 것입니다.

  • 문자열 's'를 입력으로 사용합니다.

  • 정수 함수 uniqueChar(string str)는 문자열을 입력으로 받아 처음 나타나는 고유 문자의 인덱스를 반환합니다.

  • 문자열을 반복하고 문자열의 각 문자를 살펴보는 동안 char 및 해당 항목의 해시맵을 만듭니다.

  • 빈도가 2보다 작거나 1인 문자가 있으면 해당 특정 문자의 인덱스를 반환합니다.

  • 문자열에 고유한 문자가 없으면 '-1'을 출력으로 반환합니다.

예시

#include<bits/stdc++.h>
using namespace std;
int uniqueChar(string str){
   int ans = -1;
   unordered_map<char,int>mp;
   for(int i=0;str[i]!='\0'){
      mp[str[i]]++;
   }
   for(int i=0;i<s.size();i++){
      for(auto it= mp.begin();it!=mp.end();it++){
         if(it->first==str[i] && it->second==1){
            ans= i;
         }
      }
   }
   return ans;
}
int main(){
   string s= "tutorialspoint";
   cout<<uniqueChar(s)<<endl;
   return 0;
}

출력

위의 코드를 실행하면 출력이 다음과 같이 인쇄됩니다.

1

설명 − 입력 문자열 'tutorialspoint'는 고유 문자 'u', 'r', 'l'을 포함하며 첫 번째 고유 문자 'u'는 인덱스 '1'을 갖습니다. 따라서 출력으로 '1'을 얻습니다.