HDU3336 Count the string 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336
题目大意:找出字符串s中和s的前缀相同的所有子串的个数。
题目分析:KMP模板题。这道题考虑 nxt[] 数组的应用。以 s[i] 结尾的子串中一共有多少个子串可以作为s的前缀呢?我们只要令 t = nxt[i],cnt=0
每当 t!=-1,cnt++, t=nxt[t] 就可以了。
当然,我们可以用dp优化,dp[i] = dp[nxt[i]]+1 ,当然,如果 nxt[i]==-1 ,那么 dp[i] 就是 1,因为 s[0...i] 。
实现代码如下:
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
#define MOD 10007
const int maxn = 1001000;
int T, m, nxt[maxn], ans, f[maxn];
string t;
void cal_next() {
    m = t.length();
    for (int i = 0, j = -1; i < m; i ++) {
        while (j != -1 && t[j+1] != t[i]) j = nxt[j];
        nxt[i] = (j+1 < i && t[j+1] == t[i]) ? ++j : -1;
    }
}
void solve() {
    ans = 0;
    for (int i = 0; i < m; i ++) {
        if (nxt[i] == -1) f[i] = 1;
        else f[i] = f[nxt[i]] + 1;
        ans = (ans + f[i]) % MOD;
    }
    cout << ans << endl;
}
int main() {
    scanf("%d", &T);
    while (T --) {
        cin >> m >> t;
        cal_next();
        solve();
    }
    return 0;
}
作者:zifeiy
HDU3336 Count the string 题解 KMP算法的更多相关文章
- hdoj 3336 Count the string【kmp算法求前缀在原字符串中出现总次数】
		Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ... 
- hdu3336 Count the string 扩展KMP
		It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ... 
- HDU3336 Count the string  —— KMP next数组
		题目链接:https://vjudge.net/problem/HDU-3336 Count the string Time Limit: 2000/1000 MS (Java/Others) ... 
- 【HDU 3336】Count the string(KMP+DP)
		Problem Description It is well known that AekdyCoin is good at string problems as well as number the ... 
- 北京师范大学第十五届ACM决赛-重现赛J	Just A String (kmp算法延伸)
		链接:https://ac.nowcoder.com/acm/contest/3/J 来源:牛客网 Just A String 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ... 
- HDU 3336 Count the string(KMP的Next数组应用+DP)
		Count the string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ... 
- hdu_3336: Count the string(KMP dp)
		题目链接 题意:求给定字符串中,可以与某一前缀相同的所有子串的数量 做这道题需要明白KMP算法里next[]数组的意义 首先用一数组nex[](这里与之前博客中提到的next明显不同)存储前缀后缀最长 ... 
- HDU3336 Count the string KMP 动态规划
		欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - HDU3336 题意概括 给T组数据,每组数据给一个长度为n的字符串s.求字符串每个前缀出现的次数和,结果mo ... 
- kuangbin专题十六 KMP&&扩展KMP HDU3336 Count the string
		It is well known that AekdyCoin is good at string problems as well as number theory problems. When g ... 
随机推荐
- TP5中隐藏入口文件的问题 - CSDN博客
			使用phpstudy和linux部署的时候 tp5中的官方说明是在入口文件的同级目录下添加一个.htaccess文件 文件内容如下: <IfModule mod_rewrite.c>Opt ... 
- AspNet 常有功能函数1.0
			1.net 获取客户端ip方法(此方法不是很准确) public static string GetIP() { string str; if (!string.IsNullOrEmpty(HttpC ... 
- bzoj 4198 [Noi2015]荷马史诗——哈夫曼树
			题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4198 学习一下哈夫曼树.https://www.cnblogs.com/Zinn/p/940 ... 
- hdu 2444 The Accomodation of Students(二分匹配 匈牙利算法 邻接表实现)
			The Accomodation of Students Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ... 
- Gradle中的buildScript,gradle wrapper,dependencies等一些基础知识
			就想收藏一篇好文,哈哈,无他 Gradle中的buildScript代码块 - 黄博文 然后记录一些gradle的基础知识: 1.gradle wrapper就是对gradle的封装,可以理解为项目内 ... 
- nodeJs koa-generator脚手架
			koa-generator 脚手架 全局安装:cnpm install -g koa-generator 查看版本:koa2 --version 创建项目:koa2 project 默认的是用jade ... 
- PHP汉字验证码
			转自:http://www.blhere.com/1167.html 12345678910111213141516171819202122232425262728293031323334353637 ... 
- hdu1532&&poj1273 最大流
			Dinic算法: 层次图:根据源点到该点的距离建图,这里设相邻的都差1. (下面部分转) 在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4 ... 
- JavaScript的六种数据类型与隐式转换
			一.六种数据类型 javascript的数据类型包括: (1)基本数据类型:number.string.boolean.null.undefined (2)对象:object object又包括Fun ... 
- framework7 上拉加载一些ajax问题
			1.请求第一组数据后如果不能产生上拉进度条,则无法进行上拉加载. 解决办法:首次加载的数据量设置合理即可. 2.同一组数据请求多次,原因是异步刷新时间差,请求参数未更新,多次触发了上拉加载. 解决办法 ... 
