문자열 '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'을 얻습니다.