https://school.programmers.co.kr/learn/courses/30/lessons/142086
첫 알파벳은 무조건 -1이므로 -1처리해준다.
그 다음 알파벳부터는 for문을 이중으로 돌려서 해당 알파벳에서 역순으로 서치하면서 같은 문자가 있는지 체크하고 있으면 그 위치를 저장하고 바로 break한다.
없으면 -1이 반환된다.
#include <string>
#include <vector>
using namespace std;
vector<int> solution(string s) {
vector<int> answer;
answer.push_back(-1);
for(int i = 1; i < s.length(); i++)
{
int num = -1;
for(int j = i - 1; j >= 0; j--)
{
if(s[i] == s[j])
{
num = i - j;
break;
}
}
answer.push_back(num);
}
return answer;
}
#include <string>
#include <vector>
#include <map>
using namespace std;
vector<int> solution(string s)
{
map<char, int> mp;
vector<int> answer;
for (int i = 0; i < s.size(); ++i)
{
if (mp.find(s[i]) != mp.end()) answer.push_back(i - mp[s[i]]);
else answer.push_back(-1);
mp[s[i]] = i;
}
return answer;
}
map을 만들고, find해서 있으면 value값(해당 알파벳을 찾았던 마지막 위치)을 기반으로 index에서 뺴서 위치를 answer에 넣어줌. key를 못찾으면(처음 나온 알파벳이면) -1을 넣어줌.
작업 끝난 뒤 해당 key의 value값을 갱신