KMP字符串匹配算法
来源:互联网 发布:查看1433端口是否打开 编辑:程序博客网 时间:2024/06/04 01:10
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> getNext(string &patten)
{
vector<int> next(patten.size(), 0);
int curr = 0;
for (unsigned int i = 1; i < patten.size(); i++)
{
while (curr > 0 && patten[i] != patten[curr])
{
curr = next[curr-1];
}
if (patten[i] == patten[curr])
{
curr++;
}
next[i] = curr;
}
return next;
}
vector<int> findPattenByKMP(string &str, string &patten)
{
vector<int> next = getNext(patten);
vector<int> result;
unsigned int curr = 0;
for (unsigned int i = 0; i < str.size(); i++)
{
while (curr > 0 && str[i] != patten[curr])
{
curr = next[curr-1];
}
if (str[i] == patten[curr])
{
curr++;
}
if (curr == patten.size())
{
result.push_back(i-patten.size()+1);
curr = next[curr-1];
}
}
return result;
}
int main(void)
{
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
string patten, str;
cin>>patten>>str;
cout<<findPattenByKMP(str, patten).size()<<endl;
}
return 0;
}
#include <string>
#include <vector>
using namespace std;
vector<int> getNext(string &patten)
{
vector<int> next(patten.size(), 0);
int curr = 0;
for (unsigned int i = 1; i < patten.size(); i++)
{
while (curr > 0 && patten[i] != patten[curr])
{
curr = next[curr-1];
}
if (patten[i] == patten[curr])
{
curr++;
}
next[i] = curr;
}
return next;
}
vector<int> findPattenByKMP(string &str, string &patten)
{
vector<int> next = getNext(patten);
vector<int> result;
unsigned int curr = 0;
for (unsigned int i = 0; i < str.size(); i++)
{
while (curr > 0 && str[i] != patten[curr])
{
curr = next[curr-1];
}
if (str[i] == patten[curr])
{
curr++;
}
if (curr == patten.size())
{
result.push_back(i-patten.size()+1);
curr = next[curr-1];
}
}
return result;
}
int main(void)
{
int n;
cin>>n;
for(int i = 0; i < n; i++)
{
string patten, str;
cin>>patten>>str;
cout<<findPattenByKMP(str, patten).size()<<endl;
}
return 0;
}
0 0
- KMP 字符串匹配算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串匹配 KMP 算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- KMP算法:字符串匹配
- KMP字符串匹配算法
- 字符串匹配--KMP算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- 规避重复包含
- AJAX and testing
- 时钟周期/指令周期/机器周期/指令周期
- POJ 3122 Pie (二分+精度问题)
- UVa 213 信息编码!模拟!
- KMP字符串匹配算法
- Selenium
- redis入门到精通
- android基础--2
- WebAii - tools for Ajax
- HDU2101 A + B Problem Too【水题】
- PCB之创建焊盘
- 我的便笺本(MyNote) V1.0 Beta
- 装饰模式(Decorator)