
字符串
文章平均质量分 78
ZXLS-ZMR
我喜欢编程喜欢学习新的知识
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
彻底弄懂kmp-字符匹配
这个算法很有技巧性,这主要是next[],它的值与匹配字符串有关系,而与主字符串没关系,它是表示副字符串(匹配的字符串)的移动位置。当主字符串的第i个与副的第j个不匹配,就要用到next[j],这时它就决定j的值了,意思就是:j此时的位置取决于匹配的字符串的结构。此时j的移动是为了与主字符串第i个相匹配,我们不难发现,主字符串中的 i 并没有回溯,只是副字符串在回溯,但j并不是时时刻刻一个原创 2013-05-05 20:25:17 · 886 阅读 · 0 评论 -
Codeforces 118C Fancy Number
题意:给出车牌号码n个数,改变其中的一些数使得有相同的k个数,改变一次所付出的代价为两个数的差的绝对值,求最少的代价并输出字典序最小的一个。思路:枚举每个数,从每个数的两端出发,枚举每次最小付出的代价,并保存最小字典序的字串,注意一点:变大的数从后修改,变小的数从前面修改,这样又可以保证每次修改的字串是字典序最小的了,另外当原有字串相同个数大于或等于k,结果都为零,我先以为必需等一k个,想的太原创 2013-11-07 14:09:50 · 1039 阅读 · 0 评论 -
poj-2406 kmp中的next数组应用
题意:求子串出现最多的次数。明白kmp数组的next数组。#include#include#includeusing namespace std ;char st[1000005];int next[1000005];int main(){ int len,t; while(scanf("%s",st),st[0]!='.'){ len=strlen(原创 2013-09-14 16:52:44 · 777 阅读 · 0 评论 -
poj-3461 kmp重叠匹配
题意有点难懂:给出主字符串1,字符串2,问你字符串1在字符串2中出现的次数。这题是kmp的多重匹配,按着模板,敲,稍修一下改就行了。#include#include#includeusing namespace std ;char st[1000005],ch[10005];int fail[10005];int kmp(char *st,char *ch) //原创 2013-09-14 14:33:51 · 844 阅读 · 0 评论 -
poj 1035 string 的匹配
题意:给出字典的单词,在给出要匹配的字串,问是否完全匹配,或删除一个字符,添加一个字符,符合所给的字典。所给的数不大,枚举完全可以过。刚开始用了string类,导致超时了,用char型就好了!#include#include#includeusing namespace std ;char st[10005][18];char res[10005][18];int原创 2013-09-13 22:07:52 · 744 阅读 · 0 评论 -
poj 2774 后缀数组(最长公共子序)
表示后缀数组还没完全弄明白:看罗穗骞的论文。贴下参考代码:#include#include#includeusing namespace std;#define maxn 200002int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a原创 2013-08-15 21:51:20 · 784 阅读 · 0 评论 -
HDU-1075 tire
题目连接这题很有意思。分析一下我的解题思路:先把字符串插入到字典树中,在最后一个字符中开辟一个空间,来存放与它相对应的字符串,这样就可以出来,有公共前缀的字符了和字符长短不一的情况,所以这样操作很方便了。代码分析见注释:(思路很简单)#include#include#includestruct tire{ char *ch; tire *next[26]; tire()原创 2013-07-26 10:56:24 · 811 阅读 · 0 评论 -
HDU-1251,字典树
一道典型的字典树问题。字典树有叫前缀数,这题不用它才怪。字典树很简单,三个基本的操作,建立字典树,插入,查询。知道怎么建和用,就可以A了。#include#includeusing namespace std;struct tire{ int num; tire *next[26]; tire(){ num=0; memset(next,0,sizeof(next)原创 2013-07-23 20:07:31 · 699 阅读 · 0 评论 -
poj1159-LCS滚动数组优化。
题目连接题意: 回文,就是从某一个字后面一次往回走。比如abdsdba从s开始后面的字符刚好往回走了,给你一个字符串,问你要插入至少多小个字符可以补成回文。分析:此题就是比较两个正序和逆序的字符的最长公共子序列。由于字符串长度达5000个。开关5000*5000二维数组,是超内存。方法就是。利用滚动数组。#include#include#define max(a,b)原创 2013-07-18 12:54:14 · 926 阅读 · 0 评论 -
HDU2222-tire,AC自动机
好吧!为了以后复习,也为了与大家分享!我把书上的简介打到这里.基本概念:AC自动机是一种特殊的自动机,是通过在tires树上添加一些额外的边组成,其核心部分是后缀节点的构建。算法:AC自动机的构建分两步,首先通过所有的模式串建立起tire树,然后从树根向下一次计算每个节点的后缀节点。AC自动机后缀的建立过程和kmp算法中next数组的求解过程十分相似,这里我们也用next数组来原创 2013-06-07 22:47:57 · 831 阅读 · 0 评论 -
poj3630-tire
题目连接如果是TLE那就是分配内存超时了,动态分配就有行不通了。所以这题要静态分配内存。但这题让我RE很多次了,不知道什么原因,最后看到别人的代码,又没发现什么数据问题。后来才知道,每次访问结束后要释放内存。这又让我加深对c++中类的构造函数和析构函数的理解。确实佩服c++的优点。#include//#include#includeusing namespace std;原创 2013-06-17 20:30:09 · 839 阅读 · 0 评论 -
poj-2001字典树
题目连接字典树确实是个好东西,操作也比较简单,插入,和查询是字典树的基本操作。只要语法过硬,看下字典树的插入和查询的范例,没什么难度的。代码:#include#include#includeusing namespace std;struct tire{ int num; tire *next[26]; tire(){ num=0; memset(next,0,s原创 2013-06-17 14:44:24 · 684 阅读 · 0 评论 -
Java中StringTokenizer 类
StringTokenizer位于java.util包中,该类可以将字符串分解为组成它的符号词。构造函数:StringTokenizer(String str) 以字符串str为参数以(空格,换行符,制表符,回车符)结尾,建立一个StringTokenizer对象。StringTokenizer(String str,String delim)是以字符串str为参数,以delim为定原创 2014-03-07 20:12:34 · 1023 阅读 · 0 评论