PS/문자열 알고리즘[String]

백준 11478 서로 다른 부분 문자열의 개수(c++)

SeungbeomKim 2022. 7. 11. 16:37

https://www.acmicpc.net/problem/11478

 

11478번: 서로 다른 부분 문자열의 개수

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.

www.acmicpc.net

<코드>

#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