`
暴风雪
  • 浏览: 389071 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[KMP]hdoj 3336:Count the string

阅读更多

大致题意:
    给出一个字符串,求出这个字符串的每个前缀在整个串中各出现了多少次。

 

大致思路:
    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;
}
 
分享到:
评论
2 楼 暴风雪 2012-04-03  
笔良文昌 写道
    next数组的意义其实就是
    模式串 pat[0..i]上
    pat[0..next[i]] == pat[i-next[i]...i]
    使 strlen(pat[0..next[i]])最大。

参见matrix67大牛神文
1 楼 笔良文昌 2012-04-03  
    next数组的意义其实就是
    模式串 pat[0..i]上
    pat[0..next[i]] == pat[i-next[i]...i]
    使 strlen(pat[0..next[i]])最大。

相关推荐

    KMP.rar_KMP算法_java KMP_kmp string_kmp string tutorial_算法

    **KMP算法详解** KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E. Knuth、V.R. Morris和J.H. Pratt于1977年提出。它解决了在一个主串(文本串)中查找一个模式串(目标串)的问题,避免了在匹配...

    数据结构英文课件:Chap4 String.ppt

    数据结构中的字符串(String)是计算机科学中非常基础且重要的概念,尤其在文本处理、搜索算法等领域扮演着核心角色。在本课件“Chap4 String”中,主要讲解了字符串的定义、实现方式以及基本操作,并涉及到了字符串的...

    c++ KMP 算法

    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的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...

    完全掌握KMP算法思想

    std::cout &lt;&lt; "The pattern occurs " &lt;&lt; COUNT_KMP(S, T) &lt;&lt; " times in the text." &lt;&lt; std::endl; return 0; } ``` 这段代码首先定义了一个`NEXT`函数用于计算`next`数组,接着定义了`COUNT_KMP`函数用于执行KMP...

    2.KMP算法:高效字符串匹配算法详解

    kmp算法内容概况: 本文将介绍一种名为KMP的字符串匹配算法。KMP算法(Knuth-Morris-Pratt算法)是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt和James H. Morris共同发明。KMP算法通过使用一个称为...

    D-KMP-sample:D-KMP官方样本

    D-KMP体系结构-官方样本这是D-KMP架构的官方示例,展示了一个适用于Android和iOS的简单主/详细应用程序。 有关D-KMP体系结构的更多信息,请阅读相关的。D-KMP体系结构的主要功能: 它使用最新的声明性UI工具包:适用...

    KMP-Expander:适用于CSV文件的Mario Kart 7的KMP编辑器

    《KMP-Expander:CSV格式的Mario Kart 7赛道编辑工具详解》 在电子游戏领域,特别是赛车游戏,Mario Kart 7凭借其丰富的赛道设计和竞技性深受玩家喜爱。为了满足玩家对自定义赛道的需求,开发人员和爱好者们创造了...

    KMP-suanfa.rar_kmp string

    **KMP算法详解** KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由D.E. Knuth、V.R. Morris和J.H. Pratt三位学者于1970年代提出。该算法避免了在匹配过程中不必要的字符比较,从而显著提高了字符串...

    [VC++ 2010]一个封装有KMP模式匹配算法的String类示例

    在本文中,我们将深入探讨如何在C++编程环境中,特别是在Visual C++ 2010环境下,实现一个封装了KMP(Knuth-Morris-Pratt)模式匹配算法的自定义String类。KMP算法是一种高效的字符串搜索算法,能够处理模式串中存在...

    KMP算法实现的C++代码

    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算法:字符串匹配的高效利器** KMP(Knuth-Morris-Pratt)算法是一种在文本中高效地查找子串出现位置的字符串匹配算法。由唐纳德·克努斯、维克托·莫里斯和弗兰克·普拉特在1970年提出。该算法避免了在...

    String实例

    这些函数的实现会涉及字符串处理的算法,比如KMP算法、双指针等。 最后,为了方便与其他类型的对象进行转换,我们可以提供`toStdString()`(返回std::string)和`fromStdString(const std::string&)`(从std::...

    字符串的模式匹配算法——KMP

    bool KMP(const std::string& text, const std::string& pattern) { std::vector&lt;int&gt; prefix(pattern.size()); computePrefixFunction(prefix, pattern); int i = 0, j = 0; while (i () && j ()) { if (text...

    KMP_KMP_

    KMP(Knuth-Morris-Pratt)算法是由D.E. Knuth、V. Morris和J.H. Pratt三位学者在1970年提出的一种高效的字符串匹配算法,它主要用于解决在一个大文本串中查找是否存在一个特定模式串的问题。KMP算法的效率在于它...

    KMP算法实现,语言C++

    KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中高效地查找子串的模式匹配算法。它由Donald Knuth、Vaughan Pratt和James H. Morris于1970年代提出,解决了在不进行回溯的情况下查找模式字符串在主字符串中出现...

    kmp算法-基于Rust实现kmp算法.zip

    《深入理解KMP算法及其Rust实现》 KMP(Knuth-Morris-Pratt)算法是一种在文本中查找子串出现位置的高效算法,由Donald Knuth、James H. Morris和 Vaughan Pratt三位科学家共同提出。它避免了对已匹配部分的重复...

    kmp算法-基于Java实现kmp字符串搜索算法.zip

    Morris三位学者在1970年代共同提出的,它主要用于在一个主串(target string)中查找一个模式串(pattern string)。本文将详细介绍KMP算法的原理,并以Java语言为例,解析其实现过程。 1. KMP算法概述: KMP算法...

    KMP.zip_C++_KMP

    int KMP(const std::string& text, const std::string& pattern) { std::vector&lt;int&gt; lps(pattern.size()); computeLPS(lps, pattern); int i = 0, j = 0; while (i () && j ()) { if (text[i] == pattern[j])...

    D-KMP-Architecture:Daniele Baroncelli建议的D-KMP体系结构的试用样本,在这里

    D-KMP架构Daniele Baroncelli建议的D-KMP体系结构的试用示例,位于: ://danielebaroncelli.medium.com/the-future-of-apps-declarative-uis-with-kotlin-multiplatform-d-kmp-part-1 它:声明性UI(Jetpack编写)...

Global site tag (gtag.js) - Google Analytics