https://www.acmicpc.net/problem/11478
<코드>
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
int main()
{
string str;
set<string>s;
vector<string>v;
cin>>str;
for(int i=0;i<str.size();i++)
{
string ans="";
for(int j=i;j<str.size();j++){
ans += str[j];
v.push_back(ans);
}
v.push_back(ans);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
cout<<v.size();
}
<풀이과정>
각각의 부분 문자열을 벡터에 추가한다음, 중복된 부분을 제거해줘야 한다.
unique함수와 erase를 이용해 바로 제거할 수 있다.
sort(v.begin(),v.end()) =>각각의 원소 오름차순 정렬
v.erase(unique(v.begin(),v.end()),v.end())=>오름차순 정렬된 원소들 중 중복되는 원소 제거
'PS > 문자열 알고리즘[String]' 카테고리의 다른 글
백준 16916 부분 문자열(c++) (0) | 2022.07.13 |
---|---|
백준 15353 큰 수 A+B(c++) (0) | 2022.07.12 |
백준 1120 문자열(c++) (0) | 2022.07.08 |
백준 1431 시리얼 번호(c++) (1) | 2022.07.08 |
백준 11656 접미사 배열(c++) (1) | 2022.07.08 |