青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-80  評(píng)論-24  文章-0  trackbacks-0
KMP算法用來求解一個(gè)字符串是否是另外一個(gè)字符串的子串,算法復(fù)雜度為θ(n)。
大致講解下KMP算法的思想,這里不做深究,因?yàn)榫W(wǎng)上一搜一大片,尤其以Matrix67講解的非常棒,可以參考:http://www.matrix67.com/blog/archives/115
K
MP的核心思想其實(shí)就是當(dāng)在匹配的過程中,一旦發(fā)現(xiàn)當(dāng)前字符mother[i]與child[j]不匹配,則將j向前移,而保持i不變,這樣就能使得i始終是向后移動(dòng)的,所以能保證時(shí)間復(fù)雜度為θ(n)。具體j應(yīng)該如何移動(dòng),則需要預(yù)處理子串child,得出next數(shù)組,然后根據(jù)next數(shù)組查找j該向前移動(dòng)多少步。這里的思想是如果當(dāng)前mother[i] != child[j],則應(yīng)該使j = next[j],然后繼續(xù)匹配mother[i]與child[j]。next[j]的含義其實(shí)就是字符串0~next[j]是字符串0~j的后綴。理解了這個(gè)之后就可以看懂KMP代碼了。
下面是實(shí)現(xiàn)代碼,實(shí)現(xiàn)的比較丑陋,講究看吧:

 1 static int compute_next(const char *str, int *next, int len) {
 2   if (!str || !next || len <= 0) {
 3     return -1; 
 4   }
 5   next[0] = -1; 
 6   int k = -1; 
 7   int i = 1;
 8   for (i; i < len; ++i) {
 9     while (k >= 0 && str[i] != str[k + 1]) {
10       k = next[k];
11     }   
12     if (str[i] == str[k + 1]) {
13       k++;
14     }   
15     next[i] = k;
16   }
17   return 0;
18 }
19 
20 //KMP算法查找子串
21 char *Strstr(const char *str1, const char *str2) {
22   if (!str1 || !str2) {
23     return NULL;
24   }
25   int str1len = strlen(str1);
26   int str2len = strlen(str2);
27   int *next = (int *)malloc(sizeof(int) * str2len);
28 
29   if (compute_next(str2, next, str2len) == -1) {
30     return NULL;
31   }
32 
33   int k = -1;
34   int i = 0;
35   for (; i < str1len; ++i) {
36     while (k >= 0 && str1[i] != str2[k + 1]) {
37       k = next[k];
38     }
39     if (str1[i] == str2[k + 1]) {
40       k++;
41     }
42     if (k == str2len - 1) {
43       free(next);
44       next = NULL;
45       return str1 + i - str2len + 1;
46     }
47   }
48   free(next);
49   next = NULL;
50   return NULL;
51 }

poj1226題是典型的最長(zhǎng)公共子串問題,題意是有若干個(gè)字符串,找出最長(zhǎng)的一個(gè)子串的長(zhǎng)度,該子串或者其反串是所有字符串的子串。數(shù)據(jù)比較弱,所以用strstr也可以ac。思想其實(shí)是找出這N個(gè)字符串中最短的串,假設(shè)其長(zhǎng)度為l,然后依次枚舉該串的子串,不過這里可以枚舉子串的長(zhǎng)度,從l開始枚舉,一旦發(fā)現(xiàn)該串或者其反串是所有串的子串,則輸出該長(zhǎng)度。代碼如下:

 1 int main() {
 2   int cases, n, min_len, min_len_index, i, j, k, index, flag;
 3   char str_buf[105];
 4   char rev_buf[105];
 5   scanf("%d", &cases);
 6   while (cases--) {
 7     scanf("%d", &n);
 8     if (!n) {continue;}
 9     min_len = 105;
10     min_len_index = -1;
11     for (i = 0;i < n; ++i) {
12       scanf("%s", strings[i]);
13       string_len[i] = strlen(strings[i]);
14       if (string_len[i] < min_len) {
15         min_len = string_len[i];
16         min_len_index = i;
17       }
18     }
19 
20     while (min_len) {
21       //枚舉長(zhǎng)度為min_len的子串
22       for (i = 0; i <= string_len[min_len_index] - min_len; ++i) {
23         for (index = 0, j = i; j < i + min_len; ++j, ++index) {
24           str_buf[index] = strings[min_len_index][j];
25           rev_buf[min_len - 1 - index] = strings[min_len_index][j];
26         }
27         str_buf[index] = '\0';
28         rev_buf[index] = '\0';
29         for (k = 1, flag = 1; k < n; ++k) {
30           if (!Strstr(strings[k], str_buf) && !Strstr(strings[k], rev_buf)) {
31             flag = 0;
32             break;
33           }
34         }
35         if (flag == 1) {
36           goto end;
37         }
38       }
39       min_len--;
40     }
41 end: printf("%d\n", min_len);
42   }
43   return 0;
44 }
posted on 2012-09-11 20:10 myjfm 閱讀(3243) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 算法基礎(chǔ)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美午夜电影网| 国产日韩欧美在线播放不卡| 永久久久久久| 亚洲第一搞黄网站| 欧美大色视频| 欧美精品久久99久久在免费线| 9久re热视频在线精品| 亚洲黄色小视频| 国产精品成人av性教育| 在线午夜精品自拍| 午夜欧美精品| 亚洲精品久久久久久久久久久久 | 欧美一区国产一区| 欧美一级播放| 亚洲精品人人| 免费亚洲电影| 亚洲图片在线| 久久久久久**毛片大全| 99视频精品免费观看| 久久资源在线| 午夜精品久久久久久99热软件| 久久国内精品自在自线400部| 最新亚洲一区| 性欧美1819性猛交| 性色一区二区| 欧美日本亚洲| 老色批av在线精品| 欧美日韩在线三区| 欧美11—12娇小xxxx| 欧美另类视频| 一本到12不卡视频在线dvd| 一区二区在线看| 亚洲图片欧洲图片av| 91久久国产综合久久| 欧美91大片| 亚洲日本中文字幕| 在线观看日韩专区| 乱码第一页成人| 欧美中文字幕视频在线观看| 欧美日韩视频在线一区二区 | 亚洲主播在线播放| 亚洲青涩在线| 欧美日韩中文字幕综合视频| 亚洲一区二区三区国产| 一个色综合导航| 国产精品日韩高清| 一区二区动漫| 亚洲午夜精品国产| 欧美jizzhd精品欧美巨大免费| 亚洲国产99| 午夜精品久久久久久久久久久久久| 国产午夜精品在线| 欧美v亚洲v综合ⅴ国产v| 午夜精品婷婷| 在线观看国产一区二区| 欧美片第一页| 欧美一区二区三区久久精品茉莉花 | 男人的天堂亚洲| 99视频国产精品免费观看| 欧美中文字幕第一页| 亚洲人成在线播放| 国产精品日韩在线一区| 久久综合狠狠| 亚洲永久网站| 亚洲国产小视频在线观看| 一色屋精品视频免费看| 欧美日韩一级黄| 久久精品国产99| 亚洲天堂偷拍| 亚洲国产精品va在线看黑人| 欧美在线高清| 中日韩美女免费视频网站在线观看| 国产一区二区久久精品| 欧美伊人精品成人久久综合97 | 亚洲愉拍自拍另类高清精品| 欧美日韩在线观看视频| 欧美中文字幕久久| 一本色道久久综合精品竹菊| 免费永久网站黄欧美| 亚洲欧洲日本mm| 国产伪娘ts一区| 欧美性生交xxxxx久久久| 能在线观看的日韩av| 午夜精品一区二区三区在线视| 亚洲欧洲精品一区二区三区不卡 | 欧美专区在线观看| 亚洲深夜av| 亚洲美女中文字幕| 国产精品久久久久aaaa| 欧美精选在线| 欧美www在线| 六月丁香综合| 久久婷婷蜜乳一本欲蜜臀| 亚洲精品乱码久久久久久| 免费在线观看一区二区| 久久精品女人的天堂av| 亚洲人成7777| 亚洲国产成人tv| 欧美午夜一区二区三区免费大片| 欧美不卡视频| 欧美成人69av| 欧美精品www| 欧美日本在线一区| 午夜精品免费| 亚洲国产日韩欧美一区二区三区| 男女激情久久| 欧美freesex交免费视频| 久久蜜桃资源一区二区老牛| 在线天堂一区av电影| 一本色道久久综合亚洲91| 99精品福利视频| 黄色在线一区| 在线欧美一区| 国产日韩欧美一区| 国产一区 二区 三区一级| 国产亚洲午夜高清国产拍精品| 国产老肥熟一区二区三区| 欧美高清一区| 久久久久久香蕉网| 久久亚洲色图| 欧美精品一区二| 国产精品99免视看9| 国产精品资源| 在线观看欧美日韩国产| 亚洲人成网站色ww在线| 日韩午夜在线| 亚洲免费影视| 亚洲乱码国产乱码精品精天堂| 亚洲精品综合久久中文字幕| 一本久道综合久久精品| 校园激情久久| 女人色偷偷aa久久天堂| 亚洲精品视频啊美女在线直播| 欧美国产欧美亚洲国产日韩mv天天看完整 | 夜夜嗨一区二区| 亚洲自拍偷拍色片视频| 久久精品国产亚洲一区二区三区| 一区二区三区精品在线| 午夜伦欧美伦电影理论片| 久久一区二区三区超碰国产精品 | 久久先锋资源| 欧美国产免费| 国产欧美欧洲在线观看| 国产精品伦理| 国产精品久久久久久久7电影| 国产中文一区二区| 国产麻豆日韩| 亚洲精品国精品久久99热一| 香蕉久久夜色精品国产| 蜜桃av综合| 亚洲一区二区三区四区中文| 毛片av中文字幕一区二区| 国产精品免费视频观看| 亚洲欧洲另类| 久久成人人人人精品欧| 亚洲人www| 久久久久久久波多野高潮日日| 欧美视频一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 国内一区二区三区在线视频| 精品va天堂亚洲国产| 亚洲一区影音先锋| 欧美高清视频一区二区| 香蕉久久精品日日躁夜夜躁| 欧美日本国产| 亚洲欧洲一区二区三区久久| 久久久精品免费视频| 欧美成人免费播放| 午夜亚洲视频| 欧美天天影院| 艳女tv在线观看国产一区| 免费不卡在线观看| 午夜影视日本亚洲欧洲精品| 欧美视频一区二区三区在线观看| 亚洲电影免费在线 | 欧美一区综合| 一本色道久久综合狠狠躁篇怎么玩| 老司机精品视频网站| 一区二区三区在线观看欧美| 久久国产精品久久久| 亚洲视频在线观看| 欧美系列电影免费观看| 一本到12不卡视频在线dvd| 欧美xart系列高清| 久久久久久午夜| 黄色成人av网| 久久一区视频| 亚洲九九精品| 欧美人与禽猛交乱配视频| 亚洲人成在线免费观看| 欧美电影电视剧在线观看| 久久久不卡网国产精品一区| 国内精品免费在线观看| 久久全国免费视频| 久久久久成人网| 精品999成人| 欧美激情视频在线免费观看 欧美视频免费一 | 亚洲国产一成人久久精品| 欧美黑人一区二区三区| 免费一级欧美片在线观看|