이 문제는 처음에 작은 실수로 인해 실패했었다.
for(int i=0; i<s.size(); i++) {
if (mp[s[i]] == 0) {
mp[s[i]] = i;
이런식으로 map에 해당 문자의 value값이 0이라면
해당 문자가 아직 등장하지 않은 것이므로
문자의 value에 현재 인덱스(위치)값을 저장했었다.
하지만 이렇게 설정할 경우 for문에서 i가 0일때
mp[특정 문자] 의 value에 0을 저장하게 되면,
다음에 또 특정 문자가 재등장했을 때 value값이 0이므로 아직 등장하지 않은 것으로 잘못 판단되어 위치가 제대로 지정되지 못한다.
따라서 다음과 같이 i+1 값을 저장해야 조건문이 올바르게 동작한다.
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
map<char, int> mp;
for(int i=0; i<s.size(); i++) {
if (mp[s[i]] == 0) {
mp[s[i]] = i+1;
answer.push_back(-1);
} else {
answer.push_back(i+1-mp[s[i]]);
mp[s[i]] = i+1;
}
}
return answer;
}