随笔分类 - 字符串问题
摘要:要说用到KMP算法,觉得也就是用到KMP的一个模板,主要还是用了KMP求出next 之后怎么判断才是关键,这两道题目是一个做法,就是最后输出稍有不同poj2406:以前在哈工大那个ACM基础教程上做过这个题目,这次做训练计划又敲了一遍,至于思路,贴个链接吧,就不重复说了http://www.cnblogs.com/fxh19911107/archive/2011/12/02/2271865.htmlpoj 1961:http://poj.org/problem?id=1961题意:不知道怎么表达,还是拿第二个例子来说吧 aabaabaabaab 这 从第一个 到 第二个 a 重复了 2 ...
阅读全文
摘要:http://acm.sdut.edu.cn/web/problem.php?action=showproblem&problemid=2222不算一个难题,就是刚一开始读题的时候感觉,题目真的好绕啊。题目的意思就是给你 一串字符串,三个一组(空格也算一个字符)的分开,按照它给的标准把这些字符串变成六位数一组的串,如果某个字符串最后不足三个,那么就用空格填充。然后呢,题目的输入是任意给你四个数字,让你用刚刚得到的那几个六位数依次对这四个数取余,会得到四个余数,然后把这四个余数连接起来,会得到一个新的字符串,(记住,如果不是第一个余数,并且余数小于10那么就加前导零把它扩充为2位数)然后
阅读全文
摘要:http://acm.sdut.edu.cn/web/problem.php?action=showproblem&problemid=2376题目的意思就是给你一串字符串,其中,大写字母代表的是运算符,小写字母代表的是操作数,然后自定义一种运算形式为。给的这串字符用栈来进行运算,最后会得到一个新的序列,题目让你找的是一种序列,这种序列用同样的运算形式,经过队列的运算后得到的新序列与栈运算得到的序列相同。其实思路就是很简单,对给定的序列按二叉树的后序遍历形式建树,然后从左向右,从下到上进行层序遍历便可得到结果。建立二叉树不难,难的是当时做的时候没有想到层序遍历是可以bfs实现的,还是f
阅读全文
摘要:题目我感觉就是一个模拟题。就是给你说TinyBasic语言的语法规则,然后让你对这个TinyBasic语言程序就进行解释。只要认真一点,就能过掉了。要注意的就是,TinyBasic语言中表达式的定义有三个,后面只要是提到有表达式的地方,这三个定义都要考虑。一开始就是以为那个IF 那里只会有 判断式 ,忘了其他的两种情况了 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 #defi
阅读全文
摘要:http://acm.sdut.edu.cn/web/showproblem.php?pid=2098&cid=1088意思就不用说了,都是汉语,都能看的懂。真是纠结了好几天,本来是A了的,可是后台数据一完善后,我的程序真是毛病百出了。重写这道题目!!!下面说一下判断字符串不合法的情况由于是好几天才A掉的,所以中间思路可能有些乱1. 从字符串第一个不是空格的地方开始,到字符串最后不为空格的地方。如果中间有空格出现,则是非法的2.如果字符串里没有“.”,也没有"e",也没有"E",则是非法的,如果有任何一个,则其个数不能超过1个,并且“e”和“E”
阅读全文
摘要:http://poj.org/problem?id=2418虽然给的训练题目是说trie树类的题目,我是按字符串处理来做的。题目的意思:先给出一下树木,然后统计这些树木的出现频率输出的时候是按字典序输出的,保留4位小数 1 #include<stdio.h> 2 #include<algorithm> 3 #include<string.h> 4 #include<iostream> 5 using namespace std; 6 #define N 1000001 7 struct node 8 { 9 char str[40];10 }a[
阅读全文
摘要:http://poj.org/problem?id=3080 题目就是让找一个公共的最长子串(连续的)一看就想起了用KMP算法,但是本来就不太懂,更别说用了,还是搜了一下解题报告,套用了KMP的模板 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 #define N 200 6 char str[20][N]; 7 8 9 /*套用的KMP的模板,在模板串里求子串*/10 int kmp(char s[],char t[])11 {1
阅读全文
摘要:http://poj.org/problem?id=1035题目很简单,就是给一连串的字符串作为标准字符串,然后是输入以些变动的字符串,这个变动的字符串是这样定义的:1.可能是随意的删掉了一个字符2.可能是随意的加上了一个字符3.与标准字符串相比,随意的替换掉了一个字符。由于上面的定义都是说的一个,所以题目也就很简单了,只要罗列三种情况就可以,len1(母串)和len2(子串),1.len1==len2, 2. len1-len2==1 3. len2-len1==1;虽然这样说简单,但是我写的时候也不觉得简单,主要是我对处理字符串不会,老是少考虑情况。好像写的代码也很复杂 1 #inclu.
阅读全文
摘要:题目就是先给出一个母串,然后给出一个子串,看这个子串的所有字符是否在母串里按从前到后的顺序出现过 1 #include<stdio.h> 2 #include<iostream> 3 #include<algorithm> 4 #include<string.h> 5 using namespace std; 6 #define N 100000 7 char str[N],sbr[N]; 8 int main() 9 {10 int i,j;11 while(cin>>sbr>>str)12 {13 int len1=s
阅读全文
摘要:题目就是间接的让你翻译单词的,输入的每一行有两个单词,其中有一个可以认为是字典,另一个就是要翻译成的单词了可能是我想的复杂了,我是用trie树做的。先定义一个结构体,存储输入的字符串 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #define N 20 5 #define M 100001 6 using namespace std; 7 struct node 8 { 9 int k;10 node *key[26];11 node()12 {13 for(in...
阅读全文
摘要:http://acm.hrbeu.edu.cn/index.php?act=problem&id=1003&cid=20题目的意思:给你一段字符串,让你输出这段字符串是由某个它的子串最大的重复次数n满足str=sbr^n,sbr为子串。解题思路:首先由KMP算出所给的这段字符串的K值,然后再由2*next[len(strlen(str))]和len的关系来确定n的值(1),若前者小于后者,则最小重复串的长度为len,即n=1;(2),若前者大于等于后者 1),如果len%(len-next[len])==0 则最小的重复串为len-next[len],即重复次数n=len/(l
阅读全文

浙公网安备 33010602011771号