카테고리 없음
substring matching
fw93
2018. 3. 23. 21:19
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include "stdafx.h" #include <iostream> #include <cstdio> using namespace std; bool issubstring(string s1, string s2) { int j = 0; for (int i = 0; i < s1.size(); i++) { if (s1.at(i) == s2.at(j)) { j++; } else { j = 0; } if (j == s2.size()) { return true; } } return false; } bool isrotation(string s1, string s2) { string s3 = s1 + s1; return issubstring(s3, s2); } int pi[100]; void kmp(char * pat) { int n = strlen(pat); int i = -1, j = 0; pi[j] = i; while (j < n) { if (i == -1 || (i >= 0 && pat[i] == pat[j])) { i++; j++; pi[j] = i; } else { i = pi[i]; } for (int z = 0; z <= n; z++) { printf("%d ", pi[z]); } printf("%d %d\n", i, j); } } void find_pattern(char *arr, char*pat) { kmp(pat); int n = strlen(arr); int m = strlen(pat); int i = 0, j = 0; while (i < n) { if (j == -1 || (j >= 0 && arr[i] == pat[j])) i++, j++; else if (arr[i] != pat[j]) j = pi[j]; if (j == m) { printf("the matching %d\n", i - m + 1); j = pi[j]; } } } int main() { char * s1 = "aaaaaaab"; char * s2 = "abcabcd"; find_pattern(s1, s2); while(1){} return 0; } | cs |