KMP是一种简化的字符串匹配的方法,思路并没有那么简单。 对于简单的给定的字符串和子串,用c++string库中的substr方法就可以很简单的做到字符匹配! 比如pta上的7-3 病毒感染检测 就可以用如下代码实现: #include <iostream>#include <string.h>us ...
分类:
编程语言 时间:
2020-05-06 14:11:26
阅读次数:
64
题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 思路补充: 使用set而不是数组,因set是用哈希表实现的,查找效率更高,为O(1) 要检查一个字符串是否有 ...
分类:
其他好文 时间:
2020-05-06 01:07:33
阅读次数:
46
一、内容小结 (一) 串 定义 空串、子串、主串等概念 顺序存储——堆 链式存储 (二) 串的模式匹配算法 BF算法 KMP算法 (三) 数组 顺序存储 特殊矩阵的压缩存储 (四) 广义表 定义 取表头和取表尾两个运算 头尾链表、拓展线性链表的存储结构 (五)对string类型进一步了解 二、心得体 ...
分类:
其他好文 时间:
2020-05-05 23:49:07
阅读次数:
100
1.第四章学习的内容是串,数组和广义表 串的模式匹配有两种算法,一种是BF算法,也是最传统的算法,耗时久,时间复杂度是O(m*n),另一种就是KMP算法,时间复杂度是O(m+n) 跟之前的数组比起来,这章学习的数组还可以用链式结构,根据用户自行选择,还学了特殊矩阵的压缩存储 广义表则是一种递归的线性 ...
分类:
其他好文 时间:
2020-05-05 23:17:12
阅读次数:
52
LINK: "Security" 求一个严格大于T的字符串 是原字符串S[L,R]的子串。 容易想到尽可能和T相同 然后再补一个尽可能小的字符即可。 出于这种思想 可以在SAM上先跑匹配 然后枚举加哪个字符 判定即可。 判定s是否在[L,R]中出现过 最快的方法 就是right集了。 这个可以线段树 ...
分类:
其他好文 时间:
2020-05-05 20:11:36
阅读次数:
61
内容小结 一、字符串 1.定义 字符串是零个或多个组成的有限序列,只包含空格的串成为空格串。串中所包含的字符个数成为串的长度,长度为0的串为空串,记作“”,一个非空串通常该记作: S=“s1,s2…sn” 字符串中任意个连续的字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串,子串的第一个 ...
分类:
其他好文 时间:
2020-05-05 19:46:08
阅读次数:
48
想到用滑动窗口来做了,没想到用hashmap来保存每一个位置。 public class L3 { public int lengthOfLongestSubstring(String s) { if(s.length()==0)return 0; HashMap<Character,Integer ...
分类:
其他好文 时间:
2020-05-05 01:09:39
阅读次数:
61
链接:https://codeforces.ml/problemset/problem/616/D 题意:寻找最长字串,使得子串中不同数字的个数不超过 K 。 Solution:尺取法,用数组vis[]存储当前字串各数字个数,num用来存储当前字串中不同数字个数,外层循环保证右边界到达n处,当当前字 ...
分类:
其他好文 时间:
2020-05-04 19:31:51
阅读次数:
56
Describe 一个长度为n的大数,用S1S2S3...Sn表示,其中Si表示数的第i位,S1是数的最高位,告诉你一些限制条件,每个条 件表示为四个数,l1,r1,l2,r2,即两个长度相同的区间,表示子串Sl1Sl1+1Sl1+2...Sr1与Sl2Sl2+1Sl2+2...S r2完全相同。比 ...
分类:
其他好文 时间:
2020-05-04 19:23:11
阅读次数:
66
"SCOI 2016 萌萌哒" solution 有点线段树的味道,但是并不是用线段树来做,而是用到另外一个区间修改和查询的利器——ST表 我们可以将一个点拆成$logN$个点,分别代表从点$i$开始,长度为$2^k$的子串 那么当我们处理两个区间相等的关系时,对区间做二进制拆分,拆成$log$个区 ...
分类:
其他好文 时间:
2020-05-04 19:04:50
阅读次数:
50