Compruebe si la string sigue el orden de los caracteres definidos por un patrón o no | Serie 1

Dada una string de entrada y un patrón, compruebe si los caracteres de la string de entrada siguen el mismo orden determinado por los caracteres presentes en el patrón. Suponga que no habrá caracteres duplicados en el patrón.

Ejemplos: 

Input: 
string = "engineers rock"
pattern = "er";
Output: true
Explanation: 
All 'e' in the input string are before all 'r'.

Input: 
string = "engineers rock"
pattern = "egr";
Output: false
Explanation: 
There are two 'e' after 'g' in the input string.

Input: 
string = "engineers rock"
pattern = "gsr";
Output: false
Explanation: 
There are one 'r' before 's' in the input string.

La idea es muy simple. Para cada par (x, y) de caracteres consecutivos en la string de patrón, encontramos la última aparición de x y la primera aparición de y en la string de entrada. Si la última aparición del carácter x es posterior a la primera aparición del carácter y para cualquier par, devolvemos falso. Será suficiente verificar cada par de caracteres consecutivos en la string de patrón. Por ejemplo, si consideramos tres caracteres consecutivos en el patrón, digamos x, y y z, si (x, y) e (y, z) devuelven verdadero, eso implica que (x, z) también es verdadero. 

A continuación se muestra la implementación de la idea anterior.

C++

// C++ program check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
#include <iostream>
using namespace std;
  
// Function to check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
bool checkPattern(string str, string pattern)
{
    // len stores length of the given pattern
    int len = pattern.length();
      
    // if length of pattern is more than length of
    // input string, return false;
    if (str.length() < len)
        return false;
      
    for (int i = 0; i < len - 1; i++)
    {
        // x, y are two adjacent characters in pattern
        char x = pattern[i];
        char y = pattern[i + 1];
         
        // find index of last occurrence of character x
        // in the input string
        size_t last = str.find_last_of(x);
          
        // find index of first occurrence of character y
        // in the input string
        size_t first = str.find_first_of(y);
          
        // return false if x or y are not present in the
        // input string OR last occurrence of x is after
        // the first occurrence of y in the input string
        if (last == string::npos || first == 
            string::npos || last > first)   
        return false;
    }
      
    // return true if string matches the pattern
    return true;
}
 
// Driver code
int main()
{
    string str = "engineers rock";
    string pattern = "gsr";
  
    cout << boolalpha << checkPattern(str, pattern);
  
    return 0;
}

Java

// Java program check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
 
class GFG
{
 
    // Function to check if characters in the input string
    // follows the same order as determined by characters
    // present in the given pattern
    static boolean checkPattern(String str, String pattern)
    {
        // len stores length of the given pattern
        int len = pattern.length();
 
        // if length of pattern is more than length of
        // input string, return false;
        if (str.length() < len)
        {
            return false;
        }
 
        for (int i = 0; i < len - 1; i++)
        {
            // x, y are two adjacent characters in pattern
            char x = pattern.charAt(i);
            char y = pattern.charAt(i + 1);
 
            // find index of last occurrence of character x
            // in the input string
            int last = str.lastIndexOf(x);
 
            // find index of first occurrence of character y
            // in the input string
            int first = str.indexOf(y);
 
            // return false if x or y are not present in the
            // input string OR last occurrence of x is after
            // the first occurrence of y in the input string
            if (last == -1 || first
                    == -1 || last > first)
            {
                return false;
            }
        }
 
        // return true if string matches the pattern
        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 contributed by Rajput-Ji

Python3

# Python3 program check if characters in
# the input string follows the same order
# as determined by characters present in
# the given pattern
 
# Function to check if characters in the
# input string follows the same order as
# determined by characters present
# in the given pattern
def checkPattern(string, pattern):
 
    # len stores length of the given pattern
    l = len(pattern)
 
    # if length of pattern is more than length
    # of input string, return false;
    if len(string) < l:
        return False
 
    for i in range(l - 1):
 
        # x, y are two adjacent characters in pattern
        x = pattern[i]
        y = pattern[i + 1]
 
        # find index of last occurrence of
        # character x in the input string
        last = string.rindex(x)
 
        # find index of first occurrence of
        # character y in the input string
        first = string.index(y)
 
        # return false if x or y are not present
        # in the input string OR last occurrence of
        # x is after the first occurrence of y
        # in the input string
        if last == -1 or first == -1 or last > first:
            return False
 
    # return true if
    # string matches the pattern
    return True
 
# Driver Code
if __name__ == "__main__":
    string = "engineers rock"
    pattern = "gsr"
    print(checkPattern(string, pattern))
 
# This code is contributed by
# sanjeev2552

C#

// C# program check if characters in the input string
// follows the same order as determined by characters
// present in the given pattern
using System;
     
class GFG
{
 
    // Function to check if characters in the input string
    // follows the same order as determined by characters
    // present in the given pattern
    static Boolean checkPattern(String str, String pattern)
    {
        // len stores length of the given pattern
        int len = pattern.Length;
 
        // if length of pattern is more than length of
        // input string, return false;
        if (str.Length < len)
        {
            return false;
        }
 
        for (int i = 0; i < len - 1; i++)
        {
            // x, y are two adjacent characters in pattern
            char x = pattern[i];
            char y = pattern[i+1];
 
            // find index of last occurrence of character x
            // in the input string
            int last = str.LastIndexOf(x);
 
            // find index of first occurrence of character y
            // in the input string
            int first = str.IndexOf(y);
 
            // return false if x or y are not present in the
            // input string OR last occurrence of x is after
            // the first occurrence of y in the input string
            if (last == -1 || first
                    == -1 || last > first)
            {
                return false;
            }
        }
 
        // return true if string matches the pattern
        return true;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        String str = "engineers rock";
        String pattern = "gsr";
 
        Console.WriteLine(checkPattern(str, pattern));
    }
}
 
/* This code contributed by PrinciRaj1992 */

Javascript

<script>
      // JavaScript program check if characters in the input string
      // follows the same order as determined by characters
      // present in the given pattern
      // Function to check if characters in the input string
      // follows the same order as determined by characters
      // present in the given pattern
      function checkPattern(str, pattern) {
        // len stores length of the given pattern
        var len = pattern.length;
 
        // if length of pattern is more than length of
        // input string, return false;
        if (str.length < len) {
          return false;
        }
 
        for (var i = 0; i < len - 1; i++) {
          // x, y are two adjacent characters in pattern
          var x = pattern[i];
          var y = pattern[i + 1];
 
          // find index of last occurrence of character x
          // in the input string
          var last = str.lastIndexOf(x);
 
          // find index of first occurrence of character y
          // in the input string
          var first = str.indexOf(y);
 
          // return false if x or y are not present in the
          // input string OR last occurrence of x is after
          // the first occurrence of y in the input string
          if (last === -1 || first === -1 || last > first) {
            return false;
          }
        }
 
        // return true if string matches the pattern
        return true;
      }
 
      // Driver code
      var str = "engineers rock";
      var pattern = "gsr";
 
      document.write(checkPattern(str, pattern));
       
      // This code is contributed by rdtank.
    </script>
Producción

false

Hemos discutido dos enfoques más para resolver este problema. 
Compruebe si la string sigue el orden de los caracteres definidos por un patrón o no | Conjunto 2  
Comprobar si la string sigue el orden de los caracteres definidos por un patrón o no | conjunto 3

Este artículo es una contribución de Aditya Goel . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *