▁string len , ▁uint 8 _ t ▁* pat , ▁size _ t ▁pat len ) ▁{ ▁▁▁▁ ▁ptr diff _ t ▁delta 1 [ AL PH AB ET _ LE N ]; ▁▁▁▁ ▁ptr diff _ t ▁delta 2 [ pat len ]; ▁// ▁C 9 9 ▁V LA ▁▁▁▁ ▁make _ delta 1 ( delta 1 , ▁pat , ▁pat len ); ▁▁▁▁ ▁make _ delta 2 ( delta 2 , ▁pat , ▁pat len ); ▁▁▁▁▁ ▁// ▁The ▁empty ▁pattern ▁must ▁be ▁considered ▁spe cially ▁▁▁▁ ▁if ▁( pat len ▁== ▁ 0 ) ▁{ ▁▁▁▁▁▁▁▁ ▁free ( delta 2 ); ▁▁▁▁▁▁▁▁ ▁return ▁string ; ▁▁▁▁ ▁} ▁▁▁▁▁ ▁size _ t ▁i ▁= ▁pat len ▁- ▁ 1 ; ▁▁▁▁▁▁▁ ▁// ▁str - idx ▁▁▁▁ ▁while ▁( i ▁< ▁string len ) ▁{ ▁▁▁▁▁▁▁▁ ▁ptr diff _ t ▁j ▁= ▁pat len ▁- ▁ 1 ; ▁// ▁pat - idx ▁▁▁▁▁▁▁▁ ▁while ▁( j ▁>= ▁ 0 ▁&& ▁( string [ i ] ▁== ▁pat [ j ])) ▁{ ▁▁▁▁▁▁▁▁▁▁▁▁ ▁-- i ; ▁▁▁▁▁▁▁▁▁▁▁▁ ▁-- j ; ▁▁▁▁▁▁▁▁ ▁} ▁▁▁▁▁▁▁▁ ▁if ▁( j ▁< ▁ 0 ) ▁{ ▁▁▁▁▁▁▁▁▁▁▁▁ ▁free ( delta 2 ); ▁▁▁▁▁▁▁▁▁▁▁▁ ▁return ▁& string [ i + 1 ]; ▁▁▁▁▁▁▁▁ ▁} ▁▁▁▁▁▁▁▁▁ ▁ptr diff _ t ▁shift ▁= ▁max ( delta 1 [ string [ i ]], ▁delta 2 [ j ]); ▁▁▁▁▁▁▁▁ ▁i ▁+= ▁shift ; ▁▁▁▁ ▁} ▁▁▁▁ ▁free ( delta 2 ); ▁▁▁▁ ▁return ▁NULL ; ▁} ▁ ▁[ Java ▁implementation ] ▁▁▁▁