鱼C论坛

 找回密码
 立即注册
查看: 2053|回复: 0

[技术交流] 看小甲鱼的kmp看了一晚上明白了不少但优化那里还是不太清楚

[复制链接]
发表于 2014-12-14 00:53:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
看小甲鱼的kmp看了一晚上明白了不少但优化
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int get_next(string t,int next[])
  5. {
  6.         int i=1;
  7.         int j=0;
  8.         next[1]=0;
  9.        
  10.         while(i<t[0])
  11.         {
  12.                 if(j==0 || t[i]==t[j])
  13.                 {
  14.                         i++;
  15.                         j++;
  16.                         //next[i]=j;       
  17.                         if(t[i]!=t[j])
  18.                         {
  19.                                 next[i]=j;
  20.                         }       
  21.                         else
  22.                         {
  23.                                 next[i]=next[j];
  24.                         }
  25.                 }
  26.                 else
  27.                 {
  28.                         j=next[j];
  29.                 }
  30.         }
  31. }

  32. int index_kmp(string s,string t,int pos)
  33. {
  34.         int i=pos;
  35.         int j=1;
  36.         int next[255];       
  37.         get_next(t,next);
  38.        
  39.         while(i<=s[0]&&j<=t[0])
  40.         {
  41.                 if(0==j || s[i]==t[j])
  42.                 {
  43.                         i++;
  44.                         j++;
  45.                 }
  46.                 else
  47.                 {
  48.                         j=next[j];
  49.                 }
  50.         }
  51.        
  52.         if(j>t[0])
  53.                 return i-t[0];
  54.         else
  55.                 return 0;
  56. }

  57. int main()
  58. {
  59.         char s[255]=" sddsfdsfsfsfefe";
  60.         char t[25]=" fds";
  61.        
  62.         s[0]=strlen(s)-1;
  63.         t[0]=strlen(t)-1;
  64.        
  65.         cout<<index_kmp(s,t,1);
  66.         return 0;       
  67. }
复制代码

那里还是不太清楚 不能不把代码粘上来

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-18 11:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表