일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- imread
- pandas
- E-P1
- CNN
- pip
- keras
- Numpy
- Python
- mean
- RNN
- SciPy
- javascript
- pycharm
- mariadb
- GT-S80
- Lotto
- synology
- 알고리즘
- index
- DFS
- 삼성소프트웨어멤버십
- LSTM
- SPL
- Series
- Splunk
- ipad
- Button
- dataframe
- install
- GitHub
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;
}
Comments