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

            求字符串中包含所有字符的最小全集子串
            http://www.vanjor.org/blog/2011/05/find-dic-substring/

            這其實(shí)也是一個(gè)最短文摘生成方法

            實(shí)現(xiàn)方式是:用兩個(gè) left 和 right 指針順序掃描母字符串。
            時(shí)間復(fù)雜度:O(N)

            實(shí)現(xiàn):

             

              1 #include <iostream>
              2 #include <string>
              3 #include <map>
              4 #include <cstring>
              5 using namespace std;
              6 
              7 string foo(const string& s, const string& t)
              8 {
              9     int tmap[256], ts[256];
             10     memset(tmap, 0sizeof (tmap));
             11     memset(ts,   0sizeof (ts));
             12     int tSize = 0;
             13     for (string::size_type i = 0; i != t.size(); ++i)
             14     {
             15         if (tmap[t[i]] == 0)
             16         {
             17             tmap[t[i]] = 1;
             18             ++tSize;
             19         }
             20     }
             21     string::size_type left = 0, right = s.size() - 1, i = 0, j = 0;
             22     int count = 0;
             23     while (i < s.size() && tmap[s[i]] == 0)
             24     {
             25         ++i;
             26     }
             27     if (i >= s.size())
             28     {
             29         return string("Not found!");
             30     }
             31     bool find = false;
             32     for (j = i; j < s.size(); ++j)
             33     {
             34         if (tmap[s[j]] == 1)
             35         {
             36             ++ts[s[j]];
             37             if (ts[s[j]] == 1)
             38             {
             39                 ++count;
             40                 if (count == tSize)
             41                 {
             42                     find = true;
             43                     if (j - i < right - left)
             44                     {
             45                         left = i;
             46                         right = j;
             47                     }
             48                     while (i < s.size())
             49                     {
             50                         if (tmap[s[i]] == 1)
             51                         {
             52                             --ts[s[i]];
             53                             if (ts[s[i]] == 0)
             54                             {
             55                                 --count;
             56                                 if (j - i < right - left)
             57                                 {
             58                                     left = i;
             59                                     right = j;
             60                                 }
             61                                 ++i;
             62                                 break;
             63                             }
             64                         }
             65                         ++i;
             66                     }
             67                     while (i < s.size() && tmap[s[i]] == 0)
             68                     {
             69                         ++i;
             70                     }
             71                     if (i >= s.size())
             72                     {
             73                         if (find)
             74                         {
             75                             return s.substr(left, right - left + 1);
             76                         }
             77                         else
             78                         {
             79                             return string("Not found!");
             80                         }
             81                     }
             82                 }
             83             }
             84         }
             85     }
             86     if (find)
             87     {
             88         return s.substr(left, right - left + 1);
             89     }
             90     else
             91     {
             92         return string("Not found!");
             93     }
             94 }
             95 
             96 int main()
             97 {
             98     string s, t;
             99     while (cin >> s >> t)
            100     {
            101         cout << foo(s, t) << endl;
            102     }
            103 
            104     return 0;
            105 }

             



            ===
            http://www.vanjor.org/blog/2011/05/sorting-collections/
            http://www.vanjor.org/blog/2011/05/find-dic-substring/
            http://coolshell.cn/articles/3933.html
            http://coolshell.cn/
            http://jsdo.it/norahiko/oxIy/fullscreen
            http://jsdo.it/
            posted on 2011-12-28 23:12 unixfy 閱讀(647) 評(píng)論(0)  編輯 收藏 引用

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


            欧美色综合久久久久久| 国色天香久久久久久久小说| 成人综合伊人五月婷久久| 久久美女人爽女人爽| 国内精品伊人久久久久网站| 国产精品久久久香蕉| 久久精品草草草| 久久亚洲AV无码精品色午夜 | 99久久精品免费| 久久久精品国产免大香伊| 色欲综合久久躁天天躁蜜桃| 国产精品内射久久久久欢欢| 久久棈精品久久久久久噜噜| 色欲综合久久躁天天躁| 久久99国产精品一区二区| 一级做a爰片久久毛片毛片| 久久噜噜电影你懂的| 亚洲αv久久久噜噜噜噜噜| 欧美久久久久久精选9999| 久久99国产精品久久99果冻传媒| 综合网日日天干夜夜久久| 日本欧美国产精品第一页久久| 精品久久久久久国产91| 影音先锋女人AV鲁色资源网久久| 久久久久亚洲爆乳少妇无| 久久夜色精品国产亚洲| 99久久精品国产免看国产一区| 亚洲色欲久久久综合网| 亚洲精品无码久久久| 久久久午夜精品福利内容| 亚洲国产成人精品91久久久| 久久国产视屏| 无码任你躁久久久久久久| 亚洲国产精品成人久久蜜臀| 久久人妻少妇嫩草AV蜜桃| 久久亚洲国产成人影院网站| 久久99精品国产麻豆蜜芽| 精品久久久久久国产牛牛app| 久久亚洲国产午夜精品理论片 | 久久久免费精品re6| 日韩精品久久无码人妻中文字幕|