Una string contiene patrones de la forma 1(0+)1 donde (0+) representa cualquier secuencia consecutiva no vacía de 0. Cuente todos esos patrones. Se permite que los patrones se superpongan. Nota: Solo contiene dígitos y caracteres en minúsculas. La string no es necesariamente un binario. 100201 no es un patrón válido. Ejemplos:
Input : 1101001 Output : 2 Input : 100001abc101 Output : 2
Tenemos una solución existente para este problema, consulte Buscar todos los patrones de «1 (0+) 1» en un enlace de string dado. También se publica otro conjunto que contiene una solución similar que usa expresiones regulares en Java . Resolveremos este problema rápidamente en python usando Regex . El enfoque es muy simple:
- Busque una primera substring en la string original que siga el patrón ’10+1′ usando el método re.search(regex,string) .
- substr = re.search(regex,string) devuelve Ninguno si no encuentra la expresión regular dada como substring en la string original; de lo contrario, devuelve la primera substring coincidente que sigue el patrón ’10+1′. substr.start() nos da el índice inicial de la expresión regular coincidente y substr.end() nos da el índice final de la expresión regular coincidente.
- Siempre que encontremos expresiones regulares como substring, aumente el conteo en 1 y busque nuevamente la expresión regular dada a partir del índice final de la substring anterior.
Python3
# Python program to Find all the patterns # of “1(0+)1” in a given string using Python Regex import re # Function to Find all the patterns # of “1(0+)1” in a given string def extract(input): # search regex '10+1' in original string # search() function return first occurrence # of regex '10+1' otherwise None # '10+1' means sub-string starting and ending with 1 # and atleast 1 or more zeros in between count=0 substr = re.search('10+1',input) # search for regex in original string # until we are done with complete string while substr!=None: # if we find any occurrence then increase count by 1 count=count+1 # find next occurrence just after previous # sub-string # for first occurrence 101, substr.start()=1 # substr.end()=4 input = input[(substr.end()-1):] substr = re.search('10+1',input) print (count) # Driver program if __name__ == "__main__": input = '1101001' extract(input)
Producción:
2
Publicación traducida automáticamente
Artículo escrito por Shashank Mishra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA