티스토리 뷰

백준

백준 소스코드 [C++] 10840 구간 성분

Hani_Levenshtein 2021. 3. 13. 22:20

www.acmicpc.net/problem/10840

 

10840번: 구간 성분

첫 두 줄에 신호 서열이 공백 없는 하나의 문자열로 각각 주어진다. 이 문자열은 영문 소문자로만 구성되어 있다. 두 입력 문자열의 크기 N, M의 범위는 1 ≤ N, M ≤ 1,500 이다.

www.acmicpc.net

백준 소스코드 [C++] 10840 구간 성분

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
#include <set>
#include <map>
#include <unordered_map>
#include <sstream>
#define all(v) v.begin(), v.end()
#define pii pair<int, int>
#define make_unique(v) v.erase(unique(v.begin(), v.end()), v.end())
typedef long long ll;
using namespace std;



int main() {
	ios_base::sync_with_stdio(false); 
	cin.tie(NULL);
	string Sa, Sb;
	cin >> Sa;
	cin >> Sb;

	int sa = (int)Sa.size(),sb = (int)Sb.size();
	set<vector<int> > hash;

	for (int i = 0; i < sa; i++){
		vector<int> alpha(26);
		for (int j = i; j < sa; j++) {
			alpha[Sa[j] - 'a']++;
			hash.insert(alpha);
		}
	}
	int res = 0;
	for (int i = 0; i < sb; i++) {
		vector<int> alpha(26);
		for (int j = i; j < sb; j++) {
			alpha[Sb[j] - 'a']++;
			if (hash.count(alpha)>0)
				res = max(res, j-i+1);
		}
	}
	cout << res;
    return 0;
}
댓글