#!/usr/bin/python import sys def boyer_moore(P, T): """funcion principal para obtener las correspondencias """ encontrados = [] m = len(T) n = len(P) pre = preprocesamiento(P) c = 0 while m > c + (n - 1): for pos_P in xrange(n-1, -1, -1): pos_T = c + pos_P x = T[pos_T] y = P[pos_P] if pos_T >= m: break if x != y: r = pre.get(x) if x not in pre: c = pos_T + 1 else: mov = pos_T - (c + r) c += (mov > 0 and mov or 1) break elif pos_P == 0: encontrados.append(c) c += 1 return encontrados def preprocesamiento(P): """funcion de preprocesamiento """ map = { } l_p = len(P) for i in xrange(l_p-1, -1, -1): s = P[i] if s not in map: map[s] = i return map def main(): try: T = sys.argv[1] P = sys.argv[2] except: print "No escribiste palabras" return print "El texto es %s" %T print "El patron es %s" %P encontrados = boyer_moore(P, T) if len(encontrados) > 0: print "Las cadenas se encuentran en %s" %encontrados main()