일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Lotto
- dataframe
- SPL
- Numpy
- 삼성소프트웨어멤버십
- CNN
- GitHub
- Button
- keras
- 알고리즘
- LSTM
- Python
- Splunk
- ipad
- synology
- pip
- RNN
- javascript
- install
- index
- Series
- E-P1
- DFS
- mariadb
- pycharm
- imread
- SciPy
- mean
- pandas
- GT-S80
Archives
- Today
- Total
잠토의 잠망경
[알고리즘] KMP 본문
KMP 알고리즘
참고
http://bowbowbow.tistory.com/6
snippet
void getPi(char* Pattern)
{
int i = 1;
int j = 0;
int len = mstrlen(Pattern);
while (i<len)
{
if (Pattern[i] == Pattern[j])
{
pi[i] = ++j;
i++;
}
else
{
if (j == 0)
{
i++;
}
else
{
j = pi[j - 1];
}
}
}
}
solution
//http://bowbowbow.tistory.com/6
#include<stdio.h>
#define MAXN (512)
int Border[MAXN];
int pi[MAXN];
inline int mstrlen(char* a)
{
int i = 0;
for (; a[i]; i++);
return i;
}
void getPi(char* Pattern)
{
int i = 1;
int j = 0;
int len = mstrlen(Pattern);
while (i<len)
{
if (Pattern[i] == Pattern[j])
{
pi[i] = ++j;
i++;
}
else
{
if (j == 0)
{
i++;
}
else
{
j = pi[j - 1];
}
}
}
}
int getPatter(char* Pattern, char* Target)
{
int i = 0;
int j = 0;
int ret = 0;
int len = mstrlen(Target);
while (i < len)
{
if (Target[i] == Pattern[j])
{
if (ret == 0) ret = i;
i++;
j++;
}
else
{
if (j == 0)
{
i++;
ret = 0;
}
else
{
j = pi[j - 1];
ret = 0;
}
}
}
return ret;
}
int main(void)
{
char Text[] = "ABABABABBABABABABC";
char Pattern[] = "ABABABABC";
getPi(Pattern);
int ret = getPatter(Pattern, Text);
return 0;
}