程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu3336(Count the string)KMP的應用

hdu3336(Count the string)KMP的應用

編輯:C++入門知識

題意:給一個字符串,計算所有前綴在字符串中出現的次數和。


解法:KMP計算出Next數組後,每個位置的Next數組不斷往前遞歸,每次相應前綴次數就加1.


代碼:

/******************************************************
* author:xiefubao
*******************************************************/
#pragma comment(linker, "/STACK:102400000,102400000")
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//freopen ("in.txt" , "r" , stdin);
using namespace std;

#define eps 1e-8
const double pi=acos(-1.0);
typedef long long LL;
const int Max=200100;
const int INF=10007;
int Next[Max];
int num[Max];
char s[Max];
int len=0;
void get_next()
{
    int i=0;
    int j=Next[0]=-1;
    while(i>t;
  while(t--)
  {
      //memset(num,0,sizeof num);
      scanf("%d",&len);
      scanf("%s",s);
      get_next();
      for(int i=0;i<=len;i++)
      {
          num[i]=1;
          int t=Next[i];
          while(t>0)
          {
              num[t-1]=(num[t-1]+1)%INF;
              t=Next[t];
          }
      }
      int ans=0;
      for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved