字符串——KMP
文章平均质量分 75
HARD_UNDERSTAND
Just try
展开
-
Codeforces 631D - Messenger KMP
题目:http://codeforces.com/problemset/problem/631/D 题意: 输入一段压缩后的字符串,问子串在主串中出现的次数 分析: KMP匹配求子串在主串中出现的次数,因为是压缩后的字符串,这就要考虑字符串的长度。因为要完全匹配,显然,模式串的中间的字符和数目必须要完全和主串匹配,但是前后两个字符数目可以不相等,所以模式串删去前后两个字符,去和主串匹配,完全原创 2016-03-20 13:55:38 · 507 阅读 · 0 评论 -
Codeforces 6225B KMP
题目:Codeforces 625B 题意: 给你主串s,模式串t,其中t可能会在s中出现很多次,每次操作可以使s中的一个字符换成’#’,问最少的操作次数。 分析: 简单的KMP,求出模式串t在主串中出现的位置,然后再找出重叠的个数,相减即使答案。 例如主串1212121,模式串121,因为主串中有重叠,只需要12#2#21,两次就可以。#include<cstdio>#include<原创 2016-03-20 15:14:27 · 322 阅读 · 0 评论 -
hdu 5763 Another Meaning KMP+DP(多校)
题意: 一句话可能有两个意思,给出两个字符串A,B。B是双重意思的字符串,问A这个字符串可有几种意思?也就是说,把B串在A中替换成*,一共可以构造出几种? 例: hehehehe hehe 答案是5分析: 这题当时是我做的,第一次next数组编译错误QAQ,第二次A了。 思路是:先KMP求出B串在A串中出现的位置,然后就想着用dp了。由于在A串中B串可能会重叠,所以先O(n)预处理一下原创 2016-07-30 15:55:50 · 299 阅读 · 0 评论 -
poj 2406 连续重复子串(后缀数组DC3/kmp)
题目:http://poj.org/problem?id=2406 题意: 给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的, 求 R 的最大值。分析: 做法比较简单,穷举字符串 S 的长度 k,然后判断是否满足。判断的时候,先看字符串 L 的长度能否被 k 整除,再看 suffix(1)和 suffix(k+1)的最长公共前缀是否等于 n-k。在询问最长公共前缀的原创 2016-09-01 15:18:06 · 411 阅读 · 0 评论 -
poj 1226 出现或反转后出现在每个字符串中的最长子串(后缀数组/kmp)
题目:http://poj.org/problem?id=1226 题意: 给定 n 个字符串,求出现或反转后出现在每个字符串中的最长子串。分析: 这题不同的地方在于要判断是否在反转后的字符串中出现。其实这并没有加大题目的难度。只需要先将每个字符串都反过来写一遍,中间用一个互不相同的且没有出现在字符串中的字符隔开,再将 n 个字符串全部连起来,中间也是用一个互不相同的且没有出现在字符串中原创 2016-09-02 15:03:45 · 302 阅读 · 0 评论 -
KMP算法初步学习
准备系统的学习一下算法,就先行KMP开始吧!到目前为止,我能用到KMP的地方有三类题目: - 给出主串s和模式串t,查找t在s中出现的位置 - 给出主串s和模式串t,查找t在s中出现的次数 - 给出一个字符串t,求t中循环节的个数KMP算法的时间复杂度是O(n),因为主串s在匹配过程中是不回溯的,KMP算法的巧妙之处在于对模式串的预处理,当模式串的第j个位置与主串第i个位置不匹配的时候,他会回原创 2016-03-20 12:20:05 · 324 阅读 · 0 评论 -
hdu 5918 Sequence I (CCPC长春,KMP)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=5918 题意: 给你a,b两个序列和一个p ,求有多少个 q恰好满足 b1,b2,b3….bm 等于a[q],a[q+p],a[q+2p]……a[q+(m-1)p];分析: 将a序列,每隔p位置分成一组,这样最多有p组,个数和是n 将每组和b序列跑kmp计算答案 这题暴力也原创 2016-10-06 12:51:08 · 400 阅读 · 0 评论 -
hdu 6153 A Secret【KMP/想法题】
题目http://acm.hdu.edu.cn/showproblem.php?pid=6153题意给定两个串,求其中一个串 s 的每个后缀在另一个串 t 中出现的次数。分析后缀S(i..len)出现在后缀S(i-1…len)中,所以把两个串逆序后求KMP,这样从头扫到尾匹配一下,然后统计前缀出现的次数即可。代码#include <cstdio>#include <set>#include <i原创 2017-08-22 22:04:30 · 201 阅读 · 0 评论