SRM 597 D2 L2:LittleElephantAndString

2014-11-24 08:55:47 · 作者: · 浏览: 0

反过来考虑将 B 变换成 A 简便很多。看别人代码学到 multiset 的一个用法,很方便。

代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
          
            #include 
           
             #include 
            
              #include 
             
               #include 
              
                #include 
               
                 #include
                 #include 
                 
                   #include 
                  
                    #include 
                   
                     #include 
                    
                      #include 
                     
                       #include 
                      
                        #include 
                       
                         #include 
                        
                          using namespace std; #define CHECKTIME() printf(%.2lf , (double)clock() / CLOCKS_PER_SEC) /*************** Program Begin **********************/ class LittleElephantAndString { public: bool searchstr(string str, string seastr)// 判断 seastr 是否是 str 的子序列 { int p1, p2; p1 = p2 = 0; for (; p2 < seastr.size(); p2++, p1++) { for (; p1 < str.size(); p1++) { if (seastr[p2] == str[p1]) { break; } } if (p1 == str.size()) { return false; } } return true; } int getNumber(string A, string B) { int res = 0; if ( multiset 
                         
                           (A.begin(), A.end()) != multiset 
                          
                            (B.begin(), B.end()) ) { return -1; } int n = A.size(); res = n; string nextB; for (int i = 0; i < n; i++) { nextB = B.substr(i, n - i); if (searchstr(A, nextB)) { res = i; break; } } return res; } }; /************** Program End ************************/