Loj 103、10043 (KMP统计子串个数)】的更多相关文章

KMP算法学习链接:https://blog.csdn.net/starstar1992/article/details/54913261/ KMP算法:可以实现复杂度为O(m+n) 为何简化了时间复杂度: 充分利用了目标字符串ptr的性质(比如里面部分字符串的重复性,即使不存在重复字段,在比较时,实现最大的移动量). 上面理不理解无所谓,我说的其实也没有深刻剖析里面的内部原因. 考察目标字符串ptr: ababaca 这里我们要计算一个长度为m的转移函数next. next数组的含义就是一个固…
题意:统计子串出现在主串中的次数 思路:典型kmp #include<iostream> #include<stdio.h> #include<string.h> using namespace std; ]; void GetNext(char t[]){//求next数组 int j,k,len; j=; k=-; next[]=-; len=strlen(t); while(j<len){ ||t[j]==t[k]){ ++j; ++k; next[j]=k…
阿里“天池”竞赛平台近日推出了一个新的挑战任务:对于给定的一串 DNA 碱基序列 tt,判断它在另一个根据规则生成的 DNA 碱基序列 ss 中出现了多少次. 输出格式 输出一个整数,为 tt 在 ss 中出现的次数. 样例说明 对于第一组样例,生成的 ss 为TTTCGGAAAGGCC. 样例输入1 13 2 5 4 9 AGG 样例输出1 1 样例输入2 103 51 0 40 60 ACTG 样例输出2 5 #include <iostream> #include <cstdio&…
传送门:http://poj.org/problem?id=3461 Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 50450   Accepted: 20018 Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without the letter 'e'. He was a…
/** 获取一个字符串在另一个字符串中出现的次数.判断str2在str1中出现的次数 */ public class StringExer2 { public static void main(String[] args) { String str1 = "ab"; String str2 = "abaaba"; getCount(str1, str2); System.out.println("子串出现的次数为:" + count); } /*…
题意 给定两个字符串 \(A\) 和 \(B\),求 \(B\) 在 \(A\) 中的出现次数. 思路 这是一道 \(KMP\) 的模板题. 不过 \(Hash\) 是个好东西,可以用 \(Hash\) 代替 \(KMP\) 算法. 预处理两个字符串的哈希值,然后将 \(A\) 中所有长度为 \(len(B)\) 的子串的哈希值与 \(B\) 的哈希值比较即可. 时间复杂度 \(O(n + m)\),与 \(KMP\) 算法一样! 缺点就是常数略大,而且不能用 \(KMP\) 的 \(next\…
题目链接:https://vjudge.net/contest/70655#problem/C 后缀数组的又一神奇应用.不同子串的个数,实际上就是所有后缀的不同前缀的个数. 考虑所有的后缀按照rank排好了,我们现在已知height,也就是相邻的两个的最长公共前缀是多少.那么不同的子串个数怎么统计呢? 从第一个串开始考虑,ans+=L1.再看第二个串,会加进来几个不同的前缀呢?就是ans+=L2-height[2].第三个类似,会加进来ans+=L3-height[3]…… 因此最后的结果就是a…
题意:裸kmp 思路:kmp模板 #include<iostream> #include<stdio.h> #include<string.h> using namespace std; #define MaxSize 10005 ],t[]; int next2[MaxSize]; void GetNext(int t[],int len){//求next数组 int j,k;//,len; j=; k=-; next2[]=-; //len=strlen(t); w…
集训队论文中有求不同子串个数的做法,就是扫一遍height数组,过程中根据height数组进行去重.对于本题也是雷同的,只是每一次不是根据与排名在上一位的LCP去重,而是与上一次统计对答案有贡献的后缀进行比较去重. 几组数据 abacaba 7 abbacaa 7 baabcaa 5 #include <iostream> #include <vector> #include <algorithm> #include <string> #include &l…
828. 统计子串中的唯一字符 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数. 例如:s = "LEETCODE" ,则其中 "L", "T","C","O","D" 都是唯一字符,因为它们只出现一次,所以 countUniqueChars(s) = 5 . 本题将会给你一个字符串 s ,我们需要返回 countUniq…