大致题意:
给出一个字符串,求出这个字符串的每个前缀在整个串中各出现了多少次。
大致思路:
KMP小小变形,要深刻理解next数组的含义。
#include<iostream>
#include<cstring>
#include<stack>
#include<cstdio>
using namespace std;
const int nMax=200005;
char pat[nMax];
int lenp,next[nMax];
void get_next(){
int i,j=-1;
next[0]=-1;
for(i=1;i<=lenp;i++){
while(j>-1&&pat[j+1]!=pat[i])j=next[j];
if(pat[j+1]==pat[i])j++;
next[i]=j;
}
}
int main(){
int cas,ans,i;
scanf("%d",&cas);
while(cas--){
ans=0;
scanf("%d",&lenp);
scanf("%s",pat);
get_next();
//int j=next[lenp-1];
for(i=0;i<lenp;i++){
int j=i;
while(j!=-1){
ans++;
j=next[j];
}
}
printf("%d\n",ans%10007);
}
return 0;
}
分享到:
相关推荐
**KMP算法详解** KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E. Knuth、V.R. Morris和J.H. Pratt于1977年提出。它解决了在一个主串(文本串)中查找一个模式串(目标串)的问题,避免了在匹配...
数据结构中的字符串(String)是计算机科学中非常基础且重要的概念,尤其在文本处理、搜索算法等领域扮演着核心角色。在本课件“Chap4 String”中,主要讲解了字符串的定义、实现方式以及基本操作,并涉及到了字符串的...
std::string text = "Hello, I am learning about the KMP algorithm."; std::string pattern = "KMP"; KMP(text, pattern); return 0; } ``` 在这个例子中,`computeLPS`函数用于生成部分匹配表,`KMP`函数...
kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...
std::cout << "The pattern occurs " << COUNT_KMP(S, T) << " times in the text." << std::endl; return 0; } ``` 这段代码首先定义了一个`NEXT`函数用于计算`next`数组,接着定义了`COUNT_KMP`函数用于执行KMP...
kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...
D-KMP体系结构-官方样本这是D-KMP架构的官方示例,展示了一个适用于Android和iOS的简单主/详细应用程序。 有关D-KMP体系结构的更多信息,请阅读相关的。D-KMP体系结构的主要功能: 它使用最新的声明性UI工具包:适用...
《KMP-Expander:CSV格式的Mario Kart 7赛道编辑工具详解》 在电子游戏领域,特别是赛车游戏,Mario Kart 7凭借其丰富的赛道设计和竞技性深受玩家喜爱。为了满足玩家对自定义赛道的需求,开发人员和爱好者们创造了...
**KMP算法详解** KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E. Knuth、V.R. Morris和J.H. Pratt三位学者于1970年代提出。该算法避免了在匹配过程中不必要的字符比较,从而显著提高了字符串...
在本文中,我们将深入探讨如何在C++编程环境中,特别是在Visual C++ 2010环境下,实现一个封装了KMP(Knuth-Morris-Pratt)模式匹配算法的自定义String类。KMP算法是一种高效的字符串搜索算法,能够处理模式串中存在...
void KMP(const std::string& text, const std::string& pattern) { int n = text.size(), m = pattern.size(); const auto& pi = computePrefixFunction(pattern); int i = 0, j = 0; while (i ) { if (text[i...
**热-KMP算法:字符串匹配的高效利器** KMP(Knuth-Morris-Pratt)算法是一种在文本中高效地查找子串出现位置的字符串匹配算法。由唐纳德·克努斯、维克托·莫里斯和弗兰克·普拉特在1970年提出。该算法避免了在...
这些函数的实现会涉及字符串处理的算法,比如KMP算法、双指针等。 最后,为了方便与其他类型的对象进行转换,我们可以提供`toStdString()`(返回std::string)和`fromStdString(const std::string&)`(从std::...
bool KMP(const std::string& text, const std::string& pattern) { std::vector<int> prefix(pattern.size()); computePrefixFunction(prefix, pattern); int i = 0, j = 0; while (i () && j ()) { if (text...
KMP(Knuth-Morris-Pratt)算法是由D.E. Knuth、V. Morris和J.H. Pratt三位学者在1970年提出的一种高效的字符串匹配算法,它主要用于解决在一个大文本串中查找是否存在一个特定模式串的问题。KMP算法的效率在于它...
KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中高效地查找子串的模式匹配算法。它由Donald Knuth、Vaughan Pratt和James H. Morris于1970年代提出,解决了在不进行回溯的情况下查找模式字符串在主字符串中出现...
《深入理解KMP算法及其Rust实现》 KMP(Knuth-Morris-Pratt)算法是一种在文本中查找子串出现位置的高效算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位科学家共同提出。它避免了对已匹配部分的重复...
Morris三位学者在1970年代共同提出的,它主要用于在一个主串(target string)中查找一个模式串(pattern string)。本文将详细介绍KMP算法的原理,并以Java语言为例,解析其实现过程。 1. KMP算法概述: KMP算法...
int KMP(const std::string& text, const std::string& pattern) { std::vector<int> lps(pattern.size()); computeLPS(lps, pattern); int i = 0, j = 0; while (i () && j ()) { if (text[i] == pattern[j])...
D-KMP架构Daniele Baroncelli建议的D-KMP体系结构的试用示例,位于: ://danielebaroncelli.medium.com/the-future-of-apps-declarative-uis-with-kotlin-multiplatform-d-kmp-part-1 它:声明性UI(Jetpack编写)...