백준저지
[광고]https://www.acmicpc.net/problem/1305
• kmp 알고리즘에 대한 정확한 이해가 되어야 풀 수 있는 문제이다.
• kmp 알고리즘은 이전 포스팅에 자세히 설명을 해놨으니 참고 바란다!
• 현재 보이는 문자열 길이에서 “접두사와 접미사가 같은 최대 길이를 빼면” 정답이다.
#include <iostream>
#include <string>
using namespace std;
int * getPi(string p) {
int * pi = new int[(int)p.size()];
pi[0] = 0; int j = 0;
for (int i = 1; i < (int)p.size(); i++) {
while (p[i] != p[j]) {
if (j == 0) {
pi[i] = j;
break;
}
j = pi[j - 1];
}
if(p[i] == p[j])
pi[i] = ++j;
}
return pi;
}
int main(void) {
int in;
cin >> in;
string p;
cin >> p;
int * pi = getPi(p);
cout << in - pi[in - 1] << endl;
delete(pi);
return 0;
}'Study with book > Algorithms' 카테고리의 다른 글
| [백준]순열 사이클 (0) | 2016.12.22 |
|---|---|
| [백준]DFS와 BFS3 (0) | 2016.12.22 |
| [백준]DFS와 BFS2 (0) | 2016.12.22 |
| [백준]DFS와 BFS1 (0) | 2016.12.22 |
| KMP 알고리즘 (7) | 2016.12.02 |