Pārbaudiet, vai virkne atbilst rakstzīmju secībai, ko nosaka raksts, vai ne | 3. komplekts

Izmantojot ievades virkni un modeli, pārbaudiet, vai rakstzīmes ievades virknē atbilst tādai pašai secībai, ko nosaka shēmā esošās rakstzīmes. Pieņemsim, ka shēmā nebūs rakstzīmju dublikātu.

Piemēri:  

Input: string = 'engineers rock' pattern = 'er'; Output: true All 'e' in the input string are before all 'r'. Input: string = 'engineers rock' pattern = 'egr'; Output: false There are two 'e' after 'g' in the input string. Input: string = 'engineers rock' pattern = 'gsr'; Output: false There are one 'r' before 's' in the input string. 

Mēs esam apsprieduši divas pieejas šīs problēmas risināšanai. 
Pārbaudiet, vai virkne atbilst rakstzīmju secībai, ko nosaka raksts, vai ne | 1. komplekts  
Pārbaudiet, vai virkne atbilst rakstzīmju secībai, ko nosaka raksts, vai ne | 2. komplekts

Šajā pieejā mēs vispirms piešķiram etiķeti (vai secību) rakstzīmēm. Etiķetes tiek piešķirtas augošā secībā. 

Piemēram, modelis “gsr” ir apzīmēts šādi 

'g' => 1 's' => 2 'r' => 3 

Tas nozīmē “g” būs pirmais, tad “s”, tad “r”
Pēc iezīmju piešķiršanas rakstzīmēm mēs atkārtojam virknes rakstzīmes. Ceļojot mēs sekojam līdzi pēdējā apmeklētā varoņa etiķetei (vai secībai). Ja pašreizējā rakstzīme ir mazāka nekā iepriekšējā rakstzīme, mēs atgriežam false. Pretējā gadījumā mēs atjauninām pēdējo etiķeti. Ja visas rakstzīmes atbilst secībai, mēs atgriežam patiesu.

Zemāk ir tā ieviešana 

C++
   // C++ program to find if a string follows order   // defined by a given pattern.   #include          using     namespace     std  ;   const     int     CHAR_SIZE     =     256  ;   // Returns true if characters of str follow   // order defined by a given ptr.   bool     checkPattern  (  string     str       string     pat  )   {      // Initialize all orders as -1      vector   <  int  >     label  (  CHAR_SIZE       -1  );      // Assign an order to pattern characters      // according to their appearance in pattern      int     order     =     1  ;      for     (  int     i     =     0  ;     i      <     pat  .  length  ()     ;     i  ++  )      {      // give the pattern characters order      label  [  pat  [  i  ]]     =     order  ;      // increment the order      order  ++  ;      }      // Now one by check if string characters      // follow above order      int     last_order     =     -1  ;      for     (  int     i     =     0  ;     i      <     str  .  length  ();     i  ++  )      {      if     (  label  [  str  [  i  ]]     !=     -1  )      {      // If order of this character is less      // than order of previous return false.      if     (  label  [  str  [  i  ]]      <     last_order  )      return     false  ;      // Update last_order for next iteration      last_order     =     label  [  str  [  i  ]];      }      }      // return that str followed pat      return     true  ;   }   // Driver code   int     main  ()   {      string     str     =     'engineers rock'  ;      string     pattern     =     'gsr'  ;      cout      < <     boolalpha      < <     checkPattern  (  str       pattern  );      return     0  ;   }   
Java
   // Java program to find if a string follows order    // defined by a given pattern.   class   GFG      {      static     int     CHAR_SIZE     =     256  ;      // Returns true if characters of str follow      // order defined by a given ptr.      static     boolean     checkPattern  (  String     str        String     pat  )      {      int  []     label     =     new     int  [  CHAR_SIZE  ]  ;      // Initialize all orders as -1      for     (  int     i     =     0  ;     i      <     CHAR_SIZE  ;     i  ++  )      label  [  i  ]     =     -  1  ;      // Assign an order to pattern characters      // according to their appearance in pattern      int     order     =     1  ;      for     (  int     i     =     0  ;     i      <     pat  .  length  ();     i  ++  )         {      // give the pattern characters order      label  [  pat  .  charAt  (  i  )  ]     =     order  ;      // increment the order      order  ++  ;      }      // Now one by check if string characters      // follow above order      int     last_order     =     -  1  ;      for     (  int     i     =     0  ;     i      <     str  .  length  ();     i  ++  )      {      if     (  label  [  str  .  charAt  (  i  )  ]     !=     -  1  )      {      // If order of this character is less      // than order of previous return false.      if     (  label  [  str  .  charAt  (  i  )  ]      <     last_order  )      return     false  ;      // Update last_order for next iteration      last_order     =     label  [  str  .  charAt  (  i  )  ]  ;      }      }      // return that str followed pat      return     true  ;      }      // Driver code      public     static     void     main  (  String  []     args  )      {      String     str     =     'engineers rock'  ;      String     pattern     =     'gsr'  ;      System  .  out  .  println  (  checkPattern  (  str       pattern  ));      }   }   // This code is contributed by   // sanjeev2552   
Python3
   # Python3 program to find if a string follows   # order defined by a given pattern   CHAR_SIZE   =   256   # Returns true if characters of str follow    # order defined by a given ptr.    def   checkPattern  (  Str     pat  ):   # Initialize all orders as -1   label   =   [  -  1  ]   *   CHAR_SIZE   # Assign an order to pattern characters   # according to their appearance in pattern   order   =   1   for   i   in   range  (  len  (  pat  )):   # Give the pattern characters order   label  [  ord  (  pat  [  i  ])]   =   order   # Increment the order   order   +=   1   # Now one by one check if string   # characters follow above order   last_order   =   -  1   for   i   in   range  (  len  (  Str  )):   if   (  label  [  ord  (  Str  [  i  ])]   !=   -  1  ):   # If order of this character is less   # than order of previous return false   if   (  label  [  ord  (  Str  [  i  ])]    <   last_order  ):   return   False   # Update last_order for next iteration   last_order   =   label  [  ord  (  Str  [  i  ])]   # return that str followed pat   return   True   # Driver Code   if   __name__   ==   '__main__'  :   Str   =   'engineers rock'   pattern   =   'gsr'   print  (  checkPattern  (  Str     pattern  ))   # This code is contributed by himanshu77   
C#
   // C# program to find if a string follows order    // defined by a given pattern.   using     System  ;   class     GFG      {      static     int     CHAR_SIZE     =     256  ;      // Returns true if characters of str follow      // order defined by a given ptr.      static     bool     checkPattern  (  String     str        String     pat  )      {      int  []     label     =     new     int  [  CHAR_SIZE  ];      // Initialize all orders as -1      for     (  int     i     =     0  ;     i      <     CHAR_SIZE  ;     i  ++  )      label  [  i  ]     =     -  1  ;      // Assign an order to pattern characters      // according to their appearance in pattern      int     order     =     1  ;      for     (  int     i     =     0  ;     i      <     pat  .  Length  ;     i  ++  )         {      // give the pattern characters order      label  [  pat  [  i  ]]     =     order  ;      // increment the order      order  ++  ;      }      // Now one by check if string characters      // follow above order      int     last_order     =     -  1  ;      for     (  int     i     =     0  ;     i      <     str  .  Length  ;     i  ++  )      {      if     (  label  [  str  [  i  ]]     !=     -  1  )      {      // If order of this character is less      // than order of previous return false.      if     (  label  [  str  [  i  ]]      <     last_order  )      return     false  ;      // Update last_order for next iteration      last_order     =     label  [  str  [  i  ]];      }      }      // return that str followed pat      return     true  ;      }      // Driver code      public     static     void     Main  (  String  []     args  )      {      String     str     =     'engineers rock'  ;      String     pattern     =     'gsr'  ;      Console  .  WriteLine  (  checkPattern  (  str       pattern  ));      }   }   // This code is contributed by 29AjayKumar   
JavaScript
    <  script  >   // Javascript program to find if a string follows order    // defined by a given pattern.   let     CHAR_SIZE     =     256  ;      // Returns true if characters of str follow      // order defined by a given ptr.   function     checkPattern  (  str    pat  )   {      let     label     =     new     Array  (  CHAR_SIZE  );          // Initialize all orders as -1      for     (  let     i     =     0  ;     i      <     CHAR_SIZE  ;     i  ++  )      label  [  i  ]     =     -  1  ;          // Assign an order to pattern characters      // according to their appearance in pattern      let     order     =     1  ;      for     (  let     i     =     0  ;     i      <     pat  .  length  ;     i  ++  )         {          // give the pattern characters order      label  [  pat  [  i  ].  charCodeAt  (  0  )]     =     order  ;          // increment the order      order  ++  ;      }          // Now one by check if string characters      // follow above order      let     last_order     =     -  1  ;      for     (  let     i     =     0  ;     i      <     str  .  length  ;     i  ++  )      {      if     (  label  [  str  [  i  ].  charCodeAt  (  0  )]     !=     -  1  )      {          // If order of this character is less      // than order of previous return false.      if     (  label  [  str  [  i  ].  charCodeAt  (  0  )]      <     last_order  )      return     false  ;          // Update last_order for next iteration      last_order     =     label  [  str  [  i  ].  charCodeAt  (  0  )];      }      }          // return that str followed pat      return     true  ;   }   // Driver code   let     str     =     'engineers rock'  ;   let     pattern     =     'gsr'  ;   document  .  write  (  checkPattern  (  str       pattern  ));      // This code is contributed by rag2127    <  /script>   

Izvade
false 

Laika sarežģītība no šīs programmas ir O(n) ar nemainīgu papildu vietu (masīva etiķetes izmērs ir nemainīgs 256).

Palīgtelpa: O(256).