Theory:kmp 处理字符串
来源:互联网 发布:共享网络下的防监听 编辑:程序博客网 时间:2024/06/06 03:51
main point:figure the profix of string
0 0 0 1 2 3 4 1 0 1 2 3 4 5 6 7
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
a b c a b c a a d a b c a b c a b
已解决的疑惑:例如 profix[7] = 4,为什么保证4前面的几个char和7前面几个char完全相同呢?
答案:4就是因为前面一步步相同,才逐渐加1加1加上来的。
profix array :1.代表和第几位相同
2.数字为n,则代表往前的前n位,就是前缀n位
hdu2087:
剪花布条
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8781 Accepted Submission(s): 5746
Problem Description
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?
Input
输入中含有一些数据,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。如果遇见#字符,则不再进行工作。
Output
输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就老老实实输出0,每个结果之间应换行。
Sample Input
abcde a3aaaaaa aa#
Sample Output
03
#include<iostream>#include<string.h>using namespace std;#define MAXN 1005char str[MAXN], sub[MAXN];int profix[MAXN], count;void kmp( int n ){ int maxlen = 0; for( int i = 2; i <= n;i ++ ) { while( maxlen > 0 && sub[maxlen] != sub[i-1] ) maxlen = profix[maxlen]; if( sub[maxlen] == sub[i-1] ) maxlen ++; profix[i] = maxlen; }}void cal( int n, int k ){ int maxlen = 0; for( int i = 1; i <= n; i++ ) { while( maxlen > 0 && sub[maxlen] != str[i-1] ) //这个和上面kmp求子串自身profix一样的,只是用str和sub比较,而不是sub和sub自身比较 maxlen = profix[maxlen]; if( sub[maxlen] == str[i-1] ) maxlen ++; if( maxlen == k ) { count ++; maxlen =0; } } cout << count << endl;}int main(){ while(1) { cin >> str; if( str[0] == '#' ) break; cin >> sub; memset( profix, 0, sizeof(profix ) ); int len1 = strlen(str), len2 = strlen(sub); count = 0; kmp( len2 ); cal( len1, len2 ); }}
0 0
- Theory:kmp 处理字符串
- 字符串处理基础算法-KMP
- kmp算法(用来处理字符串匹配)
- HDU 3746---用KMP处理字符串
- 学习字符串处理之KMP算法
- HDU 3746 Cyclic Nacklace kmp处理字符串
- HDU 3746 Cyclic Nacklace kmp处理字符串周期问题
- Oulipo 哈希代替KMP再做字符串处理
- KMP 字符串匹配算法
- 字符串 KMP 算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- 字符串之KMP
- KMP(字符串匹配)算法
- 字符串匹配 KMP
- KMP字符串查找
- NSArray,NSSet,NSEnumerator,NSDictionary及对应Mutable介绍
- [Object-C]OC实例变量初始化方法
- mysql 新增 删除用户和权限分配
- 如何登录一个网站
- 根据metalink脚本学习undo(七)
- Theory:kmp 处理字符串
- Android中使用Notification并通过点击Notification重新启动Activity
- JavaScript基础
- 浮点数在内存中的存放方式
- ios学习笔记—— 定位服务
- ns2 中arp的注释
- 大话设计模式____单一职责模式
- 三个annotation类型(RetentionPolicy,ElementType)
- Java多线程之~~~使用Exchanger在线程之间交换数据