728x90
https://www.acmicpc.net/problem/1701
문자열의 최대 길이가 5000이므로 O(N^2)풀이가 가능합니다.
알파벳에서 각 문자가 등장하는 자리를 배열에 저장하고 이를 이용하여 서로 같은 부분의 길이가 얼마나 되는지를 확인하여 주면 됩니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <bits/stdc++.h>
using namespace std;
vector<int>pos[30];
char S[5003];
int main(){
scanf("%s",S);
int len=strlen(S),ans=0;
for(int i=0;i<len;i++){
int p=S[i]-'a';
for(int j=0;j<(int)pos[p].size();j++){
int now=0,l=i;
for(int k=pos[p][j];k>=0;k--){
if(pos[p][j]<ans)break;
if(S[k]==S[l])now++;else break;
l--;
}
ans=max(now,ans);
}
pos[S[i]-'a'].push_back(i);
}
printf("%d",ans);
return 0;
}
|
cs |
728x90
'BAEKJOON' 카테고리의 다른 글
BAEKJOON 11003번: 최솟값 찾기 (0) | 2022.03.06 |
---|---|
BAEKJOON 1005번: ACM Craft (0) | 2022.03.01 |
BAEKJOON 2252번: 줄세우기 (0) | 2022.03.01 |
BAEKJOON 8913번: 문자열 뽑기 (0) | 2022.02.26 |
BAEKJOON 9002번: Match Maker (0) | 2022.02.23 |