字符串模式匹配
来源:互联网 发布:多台docker php-fpm 编辑:程序博客网 时间:2024/05/20 07:58
/***********************************输入:主串sa, 子串sb, 开始匹配位置start*输出:成功返回sb首字符在sa的位置,否则返回-1***********************************/#include <iostream>#include <string>#include <vector>using namespace std;/********朴素模式匹配********************/int StringMatch(string &sa, string &sb, unsigned start){ if (sa.size() == 0 || sb.size() == 0) return -1; if (sa.size() < sb.size()) return -1; unsigned starta = start, startb = 0; while (starta < sa.size() - sb.size() + 1) { unsigned i = starta; unsigned j = startb; while (j < sb.size()) { if (sa[i] != sb[j]) break; ++i; ++j; } if (j == sb.size()) return starta; ++starta; } return -1;}/******KMP模式匹配********************//*next*/void GetNext(string &m, vector<int> &next){ int i = -1, j = 0; next[0] = 0; while (j < int(m.size())) { if (i == -1||m[i] == m[j]) { i++; j++; next[j] = i + 1; } else i = next[i] - 1; } return;}/*nextval*/void GetNextval(string &m, vector<int> &next){ int i = -1, j = 0; next[0] = 0; while (j < int(m.size())) { if (i == -1 || m[i] == m[j]) { i++; j++; if (m[i] != m[j]) next[j] = i + 1; else next[j] = next[i]; } else i = next[i] - 1; } return;}/*KMP*/int KMPStringMatch(string &sa, string &sb, unsigned start){ if (sa.size() == 0 || sb.size() == 0) return -1; if (sa.size() < sb.size()) return -1; vector<int> next(sa.size() + 1); GetNext(sa, next); unsigned starta = start, startb = 0; while (starta < sa.size() - sb.size() + 1) { unsigned i = starta; unsigned j = startb; while (j < sb.size()) { if (sa[i] != sb[j]) { startb = next[j]; break; } ++i; ++j; } if (j == sb.size()) return starta; ++starta; } return -1;}int main(){ string a = "0000000000000000000000000000000000000001"; string b = "00000000001"; cout << KMPStringMatch(a, b, 0) << endl; return 0;}
阅读全文
0 0
- 字符串模式匹配
- 字符串模式匹配
- 字符串模式匹配
- 字符串模式匹配算法
- 字符串模式匹配算法
- sql字符串模式匹配
- 字符串模式匹配算法
- 字符串的模式匹配
- 字符串的模式匹配
- 字符串模式匹配
- 多模式字符串匹配
- 字符串模式匹配
- 字符串模式匹配
- 字符串模式匹配
- KMP模式匹配字符串
- 字符串模式匹配
- 字符串模式匹配
- 字符串模式匹配
- HDU 6165 FFF at Valentine(tarjan缩点+拓扑排序)
- hdu 6171 ida*
- mysql @value -= 用法
- C++之MFC系统图标任务托盘显示
- 【04】淘淘商城-Service层递归拼装ItemCatResult详解
- 字符串模式匹配
- Android开发初级00_1如何在安卓开发之发送广播
- 双色球选号及确认中几等奖
- Codeforces 788B Weird journey (欧拉回路 组合数计数)
- hdu 6098
- 关于redis
- 六分钟八法则塑造优秀程序员
- AOP的底层实现-CGLIB动态代理和JDK动态代理
- io-RandomAccessFile类