随笔分类 -  字符串

[leetcode] ZigZag Conversion *
摘要:1 /* 2 * Just find the rule; Do not forget to check 3 * special cases (e.g. nRows = 1 ...) 4 * 5 * @author: HZT 6 * @date: 2013-3-9 7 */ 8 9 #include <iostream>10 #include <string>11 using namespace std;12 13 class Solution {14 public:15 string convert(string s, int nRows) {16 //... 阅读全文

posted @ 2013-03-09 00:21 龙豆 阅读(364) 评论(0) 推荐(0) 编辑

[leetcode] Longest Palindromic Substring *
摘要:1 /* 2 * DP 3 * 4 * d[i][j] represents the length of longest Palindromic 5 * substring of s[i...j]. 6 * 7 * |- j-i+1 (s[i] == s[j] && s[i+1...j-1] is Palindrome) 8 * d[i][j] = | 9 * |- max{ d[i+1][j], d[i][j-1] }10 *11 * Note: use circular array.12 */13 14 #incl... 阅读全文

posted @ 2013-03-08 23:31 龙豆 阅读(276) 评论(0) 推荐(0) 编辑

[leetcode] Longest Substring Without Repeating Characters
摘要:1 /* 2 * Use two points, pBeg and pEnd, pointing to the begin and end 3 * of current substring without repeating respectively. Integer 4 * Array pos[256] records the last occurrence position of each 5 * ASCII character. 6 * 7 * For each loop, pEnd moved forward one character. If the new... 阅读全文

posted @ 2013-03-07 21:22 龙豆 阅读(271) 评论(0) 推荐(0) 编辑

KMP 各版本实现代码
摘要:/* * DA-Main-KMP.cpp * * 两种版本, 每个版本的 找一个子串 及 找所有子串 * * 教材版 : 《数据结构域算法》 高等教育出版社 张铭等著 2008版 * 算法导论版 :《算法导论》第二版 及 《数据结构域算法》2004版 * * Created on: 2011-11-14 */#include <iostream>#include <cstring>using namespace std;char Pattern[200], Str[200];int next[200];////////////////////////////////// 阅读全文

posted @ 2011-11-14 23:02 龙豆 阅读(1944) 评论(0) 推荐(0) 编辑

poj-1226 Substrings ***
摘要:/* * 1226 KMP * * 用的KMP, O(n^3) * 由于数据规模小, 直接暴力枚举最短串的各个子串再依次与其他串KMP应该也能过 (复杂度也是O(n^3)) * * 这里不直接枚举各个子串, 而是枚举子串的起点位置, 依次与其他串KMP, 记录和每个串及其反串的最大匹配长度, * 再以此计算这些值的最小值, 就得到该起点的子串所能达到的最大匹配长度(与刚才的方法其实差不多) * */#include <cstdio>#include <cstring>using namespace std;const int maxN = 100 + 5;const i 阅读全文

posted @ 2011-10-16 23:37 龙豆 阅读(285) 评论(0) 推荐(1) 编辑

poj-2752 Seek the Name, Seek the Fame **
摘要:/* * KMP * */#include <cstdio>#include <cstring>using namespace std;const int maxL = 400000 + 10;char str[maxL];int next[maxL], stack[maxL];//计算next数组void preKMP(char *p, int len){ int k, j; //next[0] = -1 是为了标记第一个值.. 也可以把字符数组往后移一位,这样next[1] = 0, 比较正常 next[0] = -1; j = 1, k = -1; ... 阅读全文

posted @ 2011-10-16 17:24 龙豆 阅读(225) 评论(0) 推荐(0) 编辑

poj-3630 Phone List **
摘要:Trie树入门题。不多说了, 先转一个人家的分析和代码, 自己的代码附在后面。[转]:方法一:trie树有了上面学习的思考与总结,3630用trie树本以为可以水过,可是学习和做题终究是两回事,我很快写出trie树,然后提交,超时了。后来受discuss提示,我大致计算了一下本题trie树的复杂度,号码个数10000,长度10,树的宽度大概有10000,所以总的节点数大概就有100,000级(10层,每层10000),即要进行十万次new的操作,确实时间耗费很多,估计这样题目的用时要有1秒到2秒左右的样子。于是为了纯粹的做题,我将new操作省掉,改为提前申请一个buffer空间,就ac了,.. 阅读全文

posted @ 2011-10-06 17:39 龙豆 阅读(260) 评论(0) 推荐(0) 编辑

POI2000 #7 Viruses(自动机) [转]
摘要:Description Binary Viruses Investigation Committee detected, that certain sequences of zeroes and ones are codes of viruses. The committee isolated a set of all the virus codes. A sequence of zeroes and ones is called safe, if any of its segments (i.e. sequence of consecutive elements) is not a viru 阅读全文

posted @ 2011-10-05 17:24 龙豆 阅读(364) 评论(0) 推荐(0) 编辑

最大子序列、最长公共子串、最长公共子序列 [转]
摘要:最大子序列最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是{5,-3,4,2},它的和是8,达到最大;而{5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列。代码如下:#include<iostream>using namespace std;int MaxSubSeq(const int *arr,int len,int *start,int * 阅读全文

posted @ 2011-10-05 15:25 龙豆 阅读(532) 评论(0) 推荐(0) 编辑

二维模式(矩阵)匹配(Rabin-Karp算法推广到二维)[转]
摘要:本文着重讨论由Rabin-Karp算法推广到二维来解决二维模式匹配问题的算法。问题: 在一个n1*n2的二维字符组成中搜寻一个给定的m1*m2的模式。参考《算法导论》习题32.2-3.分析: 1. 首先简单介绍一下Rabin-Karp算法 Rabin-Karp算法是一种字符串匹配算法,它的主要思想是预先计算出模式串的hash值,匹配时再计算出待匹配子串的hash值,直接比较模式串和当前子串的hash值是否相等即可判断是否匹配。为了便于说明,以下以数字串为例(字符串的每个字符都是一个十进制的数字,比如字符串31415)。已知一个模式P[1..m],设p表示其相应的 十进制数的值。类似的,对于给定 阅读全文

posted @ 2011-10-05 10:33 龙豆 阅读(4292) 评论(0) 推荐(0) 编辑

KMP 算法并非字符串查找的优化 [转]
摘要:算法书和数据结构书对KMP算法多有介绍,称只需对字符串扫描一遍不需回溯云云.然而,它恐怕只应该作为一种思想存在;用于实际的字符串查找并不理想.要费劲心血实现和优化它,才能在特定的字符串上略微超过(也可能略微逊过)std::search. KMP算法的基本思想,是利用需要匹配字符串的自身信息来避免回溯.(这里讨论的算法是以C/C++为编程语言,因此下标索引以0开始) 例如:字符串PAT=”abcabcde”,里面第二段的abc和PAT开头的字符是匹配的. 假如我们有个要查找的字符串TEXT=”abcabD...”,在比较到TEXT的'D'处(TEXT[5])也即到了PAT的第二个 阅读全文

posted @ 2011-09-25 23:36 龙豆 阅读(2003) 评论(0) 推荐(0) 编辑

精确字符串匹配(BM算法) [转]
摘要:Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE ... 阅读全文

posted @ 2011-09-25 23:26 龙豆 阅读(1886) 评论(0) 推荐(0) 编辑

字符串模式匹配——Shift-And和Shift-OR算法[转]
摘要:Shift-And算法思想较之KMP算法很简单,设模式字符串为P,它主要通过保存一个集合D(D中记录了P中所有与当前已读text的某个后缀相匹配的前缀),每当text有新的字符读入,算法利用位并行机制来更新这个集合D。 设P长度为m,则集合D可表示为D=dm…d1而用D[j]代表dj D[j]=1当且仅当p1…pj是t1…ti的某个后缀,当D[m]=1时,就认为P已经于text匹配。 当读入下一个字符ti+1,需要计算新的集合D′.当且仅当D[j]=1并且ti+1等于pj+1时D'[j+1]=1.这是因为D[j]=1时有p1…pj是t1…ti的一个后缀,而当ti+1等于pj+1可推出. 阅读全文

posted @ 2011-09-25 22:49 龙豆 阅读(4625) 评论(1) 推荐(0) 编辑

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示