• <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>

            HDOJ 1841 Find the Shortest Common Superstring (最小公共父串)

            Problem Description
            The shortest common superstring of 2 strings S1 and S2 is a string S with the minimum number of characters which contains both S1 and S2 as a sequence of consecutive characters. For instance, the shortest common superstring of “alba” and “bacau” is “albacau”.
            Given two strings composed of lowercase English characters, find the length of their shortest common superstring.
             

            Input
            The first line of input contains an integer number T, representing the number of test cases to follow. Each test case consists of 2 lines. The first of these lines contains the string S1 and the second line contains the string S2. Both of these strings contain at least 1 and at most 1.000.000 characters.
             

            Output
            For each of the T test cases, in the order given in the input, print one line containing the length of the shortest common superstring.
             

            Sample Input
            2
            alba
            bacau
            resita
            mures
             

            Sample Output
            7
            8
               題目要求2個字符串的shortest common superstring,最小公共父串:使得str1和str2都包含在所求的superstring中,且該superstring的長度最小。設str1的長度為m,str2的長度為n,如果按照逐個位置匹配求公共部分的方法,時間復雜度為O(m*n)。題目中的n∈[1,1000000],顯然會TLE,必須降低時間復雜度,只能用KMP模式匹配算法來做了,時間復雜度O(m+n)。
               用KMP算法來求解時,分3種情況:
               ----str1與str2能完全匹配,長度為max{len1,len2},如banana,ban;
               ----str1與str2不能匹配,但是能找到公共部分,如字符串alba,bacau,公共部分ba長度為2;
               ----str1與str2不能匹配,且沒有公共部分,如asdf,ghjk。
             1 #include <iostream>
             2 
             3 #define max(a,b) (a>b?a:b)
             4 #define match(a,b) ((a)==(b))
             5 const int MAXN = 1000001;
             6 int fail[MAXN];
             7 char str[2][MAXN];
             8 
             9 int kmp_pat_match(char *str,int ls,int &i,char *pat,int lp,int &j){
            10     fail[0]=-1,i=0,j;
            11     for(j=1;j<lp;j++){
            12         for(i=fail[j-1];i>=0 && !match(pat[i+1],pat[j]);i=fail[i]);
            13         fail[j]=match(pat[i+1],pat[j])?i+1:-1;
            14     }
            15     for(i=j=0;i<ls&&j<lp;i++)
            16         if(match(str[i],pat[j])) j++;
            17         else if(j)
            18             j=fail[j-1]+1,i--;
            19     return j==lp?(i-lp):-1;
            20 }
            21 int main(){
            22     int i,j,t,u,v,len1,len2,pos;
            23     scanf("%d",&t),getchar();
            24     while(t--){
            25         gets(str[0]),gets(str[1]);
            26         len1=strlen(str[0]),len2=strlen(str[1]);
            27         u=0,pos=kmp_pat_match(str[0],len1,i,str[1],len2,j);
            28         if(pos!=-1) u=len2;
            29         else if(i==len1 && j>0 && match(str[0][len1-1],str[1][j-1])) u=j;
            30         v=0,pos=kmp_pat_match(str[1],len2,i,str[0],len1,j);
            31         if(pos!=-1) v=len1;
            32         else if(i==len2 && j>0 && match(str[1][len2-1],str[0][j-1])) v=j;
            33         printf("%d\n",len1+len2-max(u,v));
            34     }
            35     return 0;
            36 }

            posted on 2009-04-28 13:38 極限定律 閱讀(626) 評論(0)  編輯 收藏 引用 所屬分類: ACM/ICPC

            <2009年6月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            統計

            常用鏈接

            留言簿(10)

            隨筆分類

            隨筆檔案

            友情鏈接

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            国内精品久久久久久野外| 久久er国产精品免费观看2| 婷婷久久五月天| 2020国产成人久久精品| 粉嫩小泬无遮挡久久久久久| 狠狠色丁香久久婷婷综合_中| 亚洲AV日韩精品久久久久久| 久久婷婷五月综合色奶水99啪| 亚洲国产精品久久久久婷婷老年| 亚洲综合精品香蕉久久网97| 亚洲欧美日韩久久精品| 好久久免费视频高清| 亚洲精品无码久久千人斩| 久久99这里只有精品国产| 伊人色综合久久| 91亚洲国产成人久久精品| 97久久久久人妻精品专区| 亚洲人成电影网站久久| 亚洲日本va午夜中文字幕久久| 国产V亚洲V天堂无码久久久| 伊人久久大香线蕉av一区| 久久这里只有精品首页| 理论片午午伦夜理片久久| 精品久久久久久久久久久久久久久| 国产精品免费看久久久| 国产精品美女久久久久久2018| 久久久久久九九99精品| 久久电影网一区| 亚洲午夜福利精品久久| 日产精品久久久久久久| 国产精品久久久久一区二区三区| 国产女人aaa级久久久级| 久久91精品国产91久| 99精品久久精品一区二区| 热综合一本伊人久久精品 | 中文字幕无码精品亚洲资源网久久| 亚洲国产成人精品91久久久| 精品久久久久久国产潘金莲 | 色诱久久久久综合网ywww| 国产精品免费久久久久影院| 久久亚洲精品无码VA大香大香|