• <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>
            posts - 183,  comments - 10,  trackbacks - 0

            最長重復(fù)子串

            問題描述
            給定一個字符串,求出其最長重復(fù)子串
            例如 abcdabcd
            最長重復(fù)子串是 abcd
            最長重復(fù)子串可以重疊
            例如
            abcdabcda
            這時最長重復(fù)子串是 abcda
            中間的 a 是被重疊的。

            直觀的解法是,首先檢測長度為 n - 1 的字符串情況,如果不存在重復(fù)則檢測 n - 2, 一直遞減下去,直到 1 。
            這種方法的時間復(fù)雜度是 O(N * N * N),其中包括三部分,長度緯度、根據(jù)長度檢測的字符串數(shù)目、字符串檢測。

            改進的方法是利用后綴數(shù)組
            后綴數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),對一個字符串生成相應(yīng)的后綴數(shù)組后,然后再排序,排完序依次檢測相鄰的兩個字符串的開頭公共部分。
            這樣的時間復(fù)雜度為:
            生成后綴數(shù)組 O(N)
            排序 O(NlogN*N) 最后面的 N 是因為字符串比較也是 O(N)
            依次檢測相鄰的兩個字符串 O(N * N)
            總的時間復(fù)雜度是 O(N^2*logN), 由于第一種方法的 O(N^3)

            后綴數(shù)組的實現(xiàn):
            代碼摘自 CSDN 論壇
            http://topic.csdn.net/u/20071002/22/896b1597-fc39-466e-85d3-5bef6f7442f6.html

             1 #include <stdio.h>
             2 #include <stdlib.h>
             3 #include <string.h>
             4 
             5 #define MAXCHAR 5000 //最長處理5000個字符
             6 
             7 char c[MAXCHAR], *a[MAXCHAR];
             8 
             9 int comlen( char *p, char *q ){
            10     int i = 0;
            11     while*&& (*p++ == *q++) )
            12         ++i;
            13     return i;
            14 }
            15 
            16 int pstrcmp( const void *p1, const void *p2 ){
            17     return strcmp( *(char* const *)p1, *(char* const*)p2 );
            18 }
            19 
            20 int main(  ){
            21     char ch;
            22     int  n=0;
            23     int  i, temp;
            24     int  maxlen=0, maxi=0;
            25     printf("Please input your string:\n");
            26     while( (ch=getchar())!='\n' ){
            27         a[n]=&c[n];
            28         c[n++]=ch;
            29     }
            30     c[n]='\0';
            31     qsort( a, n, sizeof(char*), pstrcmp );
            32     for(i=0; i<n-1++i ){
            33         temp=comlen( a[i], a[i+1] );
            34         if( temp>maxlen ){
            35             maxlen=temp;
            36             maxi=i;
            37         }
            38     }
            39     printf("%.*s\n",maxlen, a[maxi]);
            40     system("PAUSE");
            41     return 0;
            42 }

             


            參考:
            http://topic.csdn.net/u/20071002/22/896b1597-fc39-466e-85d3-5bef6f7442f6.html
            http://blog.csdn.net/kongming_acm/article/details/6232439
            http://blog.sina.com.cn/s/blog_5133d4dd0100a4qd.html
            http://www.programbbs.com/bbs/view35-20014-1.htm
            http://hi.baidu.com/fangm/blog/item/58fd1a4c20a5eafdd72afcd0.html
            http://www.cnblogs.com/dyh333/articles/1801714.html
            http://www.byvoid.com/blog/tag/%E6%9C%80%E9%95%BF%E9%87%8D%E5%A4%8D%E5%AD%90%E4%B8%B2/
            http://www.shnenglu.com/Joe/archive/2011/08/19/153851.html
            posted on 2011-09-13 16:01 unixfy 閱讀(7818) 評論(0)  編輯 收藏 引用

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            无码任你躁久久久久久久| 国内精品人妻无码久久久影院| 国内精品久久久久久不卡影院| 99久久国产综合精品五月天喷水| 日韩久久无码免费毛片软件| 一本色道久久99一综合| 久久精品国产只有精品2020| 久久精品这里只有精99品| 国产69精品久久久久久人妻精品| 精品久久香蕉国产线看观看亚洲| 久久久久亚洲AV无码专区网站| 久久综合给合久久国产免费 | 久久996热精品xxxx| 久久久久久精品久久久久| 久久99国产精品一区二区| 狠狠色丁香久久婷婷综合| 97精品伊人久久久大香线蕉| 一本久久a久久精品vr综合| 丁香五月综合久久激情| 亚洲精品乱码久久久久久中文字幕 | 日本精品久久久久影院日本 | 久久精品男人影院| 成人午夜精品无码区久久| 久久久WWW成人免费毛片| 狠狠色噜噜狠狠狠狠狠色综合久久| 久久精品极品盛宴观看| 99久久免费国产精品| 国产精品久久久久久久久| 亚洲AV无一区二区三区久久 | 久久人妻少妇嫩草AV无码专区| 久久国产精品偷99| 久久精品国内一区二区三区| 久久久久久亚洲AV无码专区| 狠狠色狠狠色综合久久| 亚洲精品乱码久久久久久| 亚洲午夜久久久影院伊人| 久久丫忘忧草产品| 亚洲AV无码久久精品成人| 久久亚洲AV成人无码国产| 久久不见久久见免费视频7| 99国产欧美精品久久久蜜芽|