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

隨筆-80  評論-24  文章-0  trackbacks-0
KMP算法用來求解一個字符串是否是另外一個字符串的子串,算法復雜度為θ(n)。
大致講解下KMP算法的思想,這里不做深究,因為網(wǎng)上一搜一大片,尤其以Matrix67講解的非常棒,可以參考:http://www.matrix67.com/blog/archives/115
K
MP的核心思想其實就是當在匹配的過程中,一旦發(fā)現(xiàn)當前字符mother[i]與child[j]不匹配,則將j向前移,而保持i不變,這樣就能使得i始終是向后移動的,所以能保證時間復雜度為θ(n)。具體j應該如何移動,則需要預處理子串child,得出next數(shù)組,然后根據(jù)next數(shù)組查找j該向前移動多少步。這里的思想是如果當前mother[i] != child[j],則應該使j = next[j],然后繼續(xù)匹配mother[i]與child[j]。next[j]的含義其實就是字符串0~next[j]是字符串0~j的后綴。理解了這個之后就可以看懂KMP代碼了。
下面是實現(xiàn)代碼,實現(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題是典型的最長公共子串問題,題意是有若干個字符串,找出最長的一個子串的長度,該子串或者其反串是所有字符串的子串。數(shù)據(jù)比較弱,所以用strstr也可以ac。思想其實是找出這N個字符串中最短的串,假設其長度為l,然后依次枚舉該串的子串,不過這里可以枚舉子串的長度,從l開始枚舉,一旦發(fā)現(xiàn)該串或者其反串是所有串的子串,則輸出該長度。代碼如下:

 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       //枚舉長度為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 閱讀(3240) 評論(0)  編輯 收藏 引用 所屬分類: 算法基礎
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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国产精品久久久久久久成人热| 国产农村妇女精品一区二区| 国产精品久久九九| 国产精品美女主播| 国产亚洲综合精品| 在线观看日韩专区| 亚洲激情二区| 亚洲最新合集| 一区二区三区国产| 亚洲一区二区三区国产| 亚洲欧美日韩天堂| 久久精品视频免费播放| 农夫在线精品视频免费观看| 欧美高清视频免费观看| 亚洲精品一区二区网址| 亚洲午夜久久久| 久久激情五月激情| 欧美日韩国产首页在线观看| 国产精品美女诱惑| 亚洲日本乱码在线观看| 亚洲一区免费网站| 欧美 日韩 国产在线| 亚洲午夜激情免费视频| 久久综合九色综合欧美就去吻| 欧美日韩一级大片网址| 在线电影欧美日韩一区二区私密| 一二三区精品| 美女在线一区二区| 亚洲综合视频1区| 欧美高清视频在线播放| 久久久久久有精品国产| 欧美视频在线播放| 亚洲激情视频在线| 久久琪琪电影院| 亚洲一区二区av电影| 欧美精品激情blacked18| 好吊色欧美一区二区三区四区| 亚洲日本精品国产第一区| 久久九九精品| 一本色道久久综合亚洲精品小说| 久久久久久久久蜜桃| 国产精品豆花视频| 99视频一区二区三区| 久久这里有精品15一区二区三区| 一区二区三区高清在线观看| 欧美搞黄网站| 亚洲高清色综合| 浪潮色综合久久天堂| 欧美一级久久久久久久大片| 国产精品久久久999| 亚洲一区二区三区色| 99av国产精品欲麻豆| 欧美精品乱码久久久久久按摩| 亚洲国产中文字幕在线观看| 免费成人美女女| 久久成人国产| 极品少妇一区二区| 久久久伊人欧美| 久久精品综合网| 亚洲福利电影| 欧美激情1区2区| 欧美精品三级日韩久久| 一本色道久久综合狠狠躁篇怎么玩| 欧美高清自拍一区| 欧美成人免费在线| 亚洲视频网在线直播| 国产精品99久久久久久白浆小说| 欧美视频亚洲视频| 欧美一二三区精品| 久久国产精品久久久久久| 好吊色欧美一区二区三区四区| 榴莲视频成人在线观看| 葵司免费一区二区三区四区五区| 亚洲高清视频的网址| 亚洲黄色免费网站| 免费一区视频| 中文亚洲欧美| 亚洲欧美日韩网| 樱花yy私人影院亚洲| 久久躁日日躁aaaaxxxx| 久久天天躁狠狠躁夜夜爽蜜月| 极品尤物一区二区三区| 免费观看成人www动漫视频| 久久人体大胆视频| 91久久视频| 中文欧美在线视频| 国产精品成人在线观看| 久久躁日日躁aaaaxxxx| 久久综合久久美利坚合众国| 国产日韩欧美中文| 国产精品国产三级国产aⅴ无密码| 亚洲一区免费视频| 亚洲无人区一区| 国产一区香蕉久久| 麻豆九一精品爱看视频在线观看免费| 老色鬼久久亚洲一区二区| 亚洲黄色性网站| 亚洲欧美日韩网| 激情综合亚洲| 在线一区亚洲| 国产午夜精品麻豆| 亚洲乱码视频| 国产精品自在欧美一区| 亚洲国产高清高潮精品美女| 欧美日本乱大交xxxxx| 欧美在线观看你懂的| 久久久久久国产精品一区| 亚洲一区二区精品| 欧美在线精品免播放器视频| 一区二区日韩精品| 午夜精品影院| 亚洲无吗在线| 欧美在线1区| 午夜精品久久久久久久99黑人| 久久爱www| 欧美在线一二三四区| 欧美jizz19性欧美| 浪潮色综合久久天堂| 欧美午夜视频网站| 日韩视频在线播放| 伊人久久大香线| 欧美亚洲系列| aa成人免费视频| 免费久久精品视频| 性8sex亚洲区入口| 国产精品国产三级国产普通话99| 久久久91精品国产一区二区三区| 国产精品播放| 欧美激情一区二区久久久| 国产区在线观看成人精品| 亚洲国产精品一区二区三区| 亚洲高清在线观看| 欧美一级午夜免费电影| 午夜欧美不卡精品aaaaa| 一本到高清视频免费精品| 亚洲视频免费在线观看| 亚洲欧美国产精品va在线观看| 亚洲毛片在线观看| 久久久人成影片一区二区三区观看| 国产精品大片| 亚洲欧洲av一区二区| 午夜精品视频网站| 国产欧美一区二区三区沐欲| 99精品国产高清一区二区 | 亚洲一二区在线| 欧美日本在线看| 亚洲一区久久久| 欧美日韩精品中文字幕| 久久久国产精彩视频美女艺术照福利| 国产精品久久7| 欧美国产亚洲另类动漫| 亚洲人妖在线| 欧美成人精品h版在线观看| 亚洲影视中文字幕| 亚洲视频图片小说| 国产精品一级久久久| 日韩一级视频免费观看在线| 亚洲一区中文| 国产精品久久久久久模特| 亚洲综合99| 91久久精品一区二区别| 欧美日韩一区二区三区| 欧美mv日韩mv亚洲| 一区二区免费看| 国产精品影音先锋| 欧美一区二区免费| 欧美激情影院| 一本久道综合久久精品| 国产啪精品视频| 久久精品毛片| 亚洲精品小视频| 亚洲男人第一av网站| 一区二区三区我不卡| 牛人盗摄一区二区三区视频| 亚洲桃色在线一区| 久久久久免费观看| 亚洲午夜性刺激影院| 国产毛片久久| 欧美日韩国产精品一卡| 亚洲区中文字幕| 亚洲日本中文字幕| 欧美性天天影院| 午夜久久影院| 日韩亚洲欧美成人| 亚洲性视频网站| 韩国三级在线一区| 欧美视频一区二区三区在线观看 | 伊人久久婷婷| 欧美黄网免费在线观看| 亚洲一区二区三区精品视频| 亚洲大片av| 亚洲最新视频在线| 国产一区二区三区丝袜| 欧美日韩一区在线观看视频| 欧美一区二区三区精品电影| 一区二区欧美精品| 欧美成人有码| 蜜桃精品一区二区三区|