题意:给一个长为n的字符串,问字符串的前缀是不是周期串,如果是周期串,输出前缀的最后一个字母的位置和最短周期
思路:kmp字符串匹配的性质运用。
对于前i个字符,如果f[i]不等于零,说明在此字符串的前缀中,有一部分[0,f[i]]和本字符串[i-f[i],i]的这一部分是相同的。如果这i个字符组成一个周期串,那么错开的一部分[f[i],i]恰好是一个循环节。(换句话说,如果满足f[i]不等于...
分类:
其他好文 时间:
2015-04-02 19:00:30
阅读次数:
130
这几天折腾了下KMP,终于算是理解了其中的原理。现在这里大概记录下,以备不时之需!! char str[MAXN]; //原串 char p[MAXN]; //需要在原串中寻找的字符串相对于一般的字符串匹配,KMP算法优化的地方就在于 当发现当前匹配的位置 k + 1 匹配失败时...
分类:
编程语言 时间:
2015-04-02 14:39:39
阅读次数:
173
BM(Boyer-Moore)算法,后缀匹配,是指模式串的比较从右到左,模式串的移动也是从左到右的匹配过程,一般情况比KMP算法要快。时间复杂度O(m/n)C++描述(教师版)int BM(char S[],char T[], int n, int m){//主串长度为n,模式串长度为m,主串和模式...
分类:
编程语言 时间:
2015-04-01 19:31:34
阅读次数:
158
原文http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里...
分类:
编程语言 时间:
2015-04-01 01:39:30
阅读次数:
160
KMP算法简单粗暴的代码,严密的逻辑,初学的时候,真的很难搞懂,不过曾力胜老师这周出的模式串匹配的变形题目,让我反思了一下KMP算法,昨天晚上写出了链表形式,也算是进步吧。昨天太急,没来得及记录,今天补充起来。/*Name: KMP之链表写法Date :2015/3/29Write by:杨领 *....
分类:
编程语言 时间:
2015-03-31 00:26:48
阅读次数:
406
字符串匹配
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 214 Solved: 81
Description
给你两个字符串A,B,请输出B字符串在A字符串中出现了几次。Input
多组测试数据,每组输入两个字符串。字符串的长度 <= 1000000.Output
输出B在A中出现的次数。Sample Input
aaa aa...
分类:
其他好文 时间:
2015-03-30 23:14:46
阅读次数:
234
4194: 字符串匹配Time Limit: 1 SecMemory Limit: 128 MB Submit: 206Solved: 78Description给你两个字符串A,B,请输出B字符串在A字符串中出现了几次。Input多组测试数据,每组输入两个字符串。字符串的长度 2 #include...
分类:
其他好文 时间:
2015-03-30 20:31:45
阅读次数:
125
对于暴力搜索法,当搜索词对应的字符与字符串中的字符不匹配时。将搜索词整个后移一位,再从头逐个比较。这样做虽然可行,但是效率很差,因为你要把”搜索位置”移到已经比较过的位置,重比一遍。应用KMP算法之后,则有:
移动位数 = 已匹配的字符数 - 对应的部分匹配值
“部分匹配值”就是”前缀”和”后缀”的最长的共有元素的长度。KMP算法实现代码如下:void prefixFun(char *pat...
分类:
编程语言 时间:
2015-03-29 20:59:34
阅读次数:
259
题目:Wildcard Matching
/*LeetCode WildCard matching
* 题目:给定一个目标串和一个匹配串,判定是否能够匹配
* 匹配串中的定义:字符————>字符,*————>0个、1个或者多个字符,?——————>对应任意一个字符
* 思路:动态规划:*:dp[i][j] = dp[i][j-1] || dp[i-1][j]
* ? || s[i...
分类:
其他好文 时间:
2015-03-29 00:44:48
阅读次数:
172