рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо
рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдмреЙрдпрд░-рдореВрд░ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдЕрднреА рднреА рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмреЙрдпрд░-рдореВрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдиреЗ рдЦреБрдж рдХреЛ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо" рдХрд╛ рд╢реАрд░реНрд╖рдХ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдФрд╕рддрди рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЦреЛрдЬ рд╕рдордп рджреЗрддрд╛ рд╣реИ (рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ)ред рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рд╕рдВрд╕реНрдХрд░рдг рд╡рд░реНрдгрд┐рдд рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЕрдзреНрдпрдпрди рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдХреЗ 1 рдпрд╛ 2 рд╡реЗрдВ рд╡рд░реНрд╖ (рдореЗрд░реЗ рдЬреИрд╕реЗ) рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдХреБрдЫ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред
рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо
рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмреЙрдпрд░-рдореВрд░-рд╣реЙрд░реНрд╕рдкреВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдлрд╕реЗрдЯ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдореВрд▓ рдкрдВрдХреНрддрд┐ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреБрд▓рдирд╛ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рддреБрд▓рдирд╛ рдкрд╛рд░рдВрдЧрдд рдЪрд░рд┐рддреНрд░ рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рд╡рд░реНрдг рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рд╡рд░реНрдг рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрдерд╛рдкрди рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд▓рд┐рдП рдЧрдП рдкрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдкреИрдЯрд░реНрди рдХреЛ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдкреИрдЯрд░реНрди рдХреЗ рдЕрдВрддрд┐рдо рд╡рд░реНрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рдкреИрдЯрд░реНрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛, рдпрд╛ рдЬрдм рддрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ред
рдСрдлрд╕реЗрдЯ рддрд╛рд▓рд┐рдХрд╛
рдСрдлрд╝рд╕реЗрдЯ рдЯреЗрдмрд▓ "рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрдг рдЫреЛрдбрд╝реЗрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ" рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдХреБрдЫ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд░реНрдг рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрд░реЛрдд рд▓рд╛рдЗрди рдореЗрдВ рд╕реНрдерд┐рдд рдЪрд░рд┐рддреНрд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдбрд░ рдХреЗ, рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдкреВрд░реА рд▓рдВрдмрд╛рдИ рддрдХ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рдкреНрд░рддреАрдХ рдХреА рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд░рд╛рдмрд░ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдкреНрд░рддреАрдХ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рд╕рд╣реА рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИ)ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рди рд╡рд░реНрдг рдХреЗ рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛, рдпрджрд┐ рд╣рдо рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рд╕реЗ рдЧрд┐рдирддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рд╕рдВрдЦреНрдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдХреЛ рд╢рд┐рдлреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░рдг
рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ "somestring" рдФрд░ рдкреИрдЯрд░реНрди "рд╕реНрдЯреНрд░рд┐рдВрдЧ" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреЗ рджреЗрдВред рдЕрдм рд╣рдо рдСрдлрд╕реЗрдЯ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рд╕рднреА рд╡рд░реНрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ рдЬреЛ рдкреИрдЯрд░реНрди рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдЕрдВрдд рд╕реЗ рдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ (рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкреИрдЯрд░реНрди рдХреА рд▓рдВрдмрд╛рдИ рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓реА рдЧрдИ рд╣реИ):
s->5
t->4
r->3
i->2
n->1
g->6
рдЕрдм рд╣рдорд╛рд░реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВ:
somestring
string
рдЕрдВрддрд┐рдо рд╡рд░реНрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ: рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ "t" "g" рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред рд╣рдо "t" рдкреНрд░рддреАрдХ рдХреЗ рд▓рд┐рдП рдСрдлрд╕реЗрдЯ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ 4 рд╣реИред рд╣рдо рдкрдВрдХреНрддрд┐ рдХреЛ рджрд╛рдИрдВ рдУрд░ 4 рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЙрдЗрд▓рд╛:
somestring
string
рдЕрдЧрд▓рд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрд░реЛрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рд╕реЗ рд▓реЗрдХрд░ рдкрд╣рд▓реЗ рддрдХ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдЧрд╛ред рдЬреИрд╕реЗ рд╣реА рд╡рд╣ рдмрд╛рдж рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдШрдЯрдирд╛ рд╣реИред
рдХреЛрдб
рдЗрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдорд╕рд╛рд▓рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬрд╛рд╡рд╛ рдХреЛрдб рд▓рд┐рдЦреЗред рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
public int getFirstEntry(String source, String template) { int sourceLen = source.length(); int templateLen = template.length(); if (templateLen > sourceLen) { return -1; } HashMap<Character, Integer> offsetTable = new HashMap<Character, Integer>(); for (int i = 0; i <= 255; i++) { offsetTable.put((char) i, templateLen); } for (int i = 0; i < templateLen - 1; i++) { offsetTable.put(template.charAt(i), templateLen - i - 1); } int i = templateLen - 1; int j = i; int k = i; while (j >= 0 && i <= sourceLen - 1) { j = templateLen - 1; k = i; while (j >= 0 && source.charAt(k) == template.charAt(j)) { k--; j--; } i += offsetTable.get(source.charAt(i)); } if (k >= sourceLen - templateLen) { return -1; } else { return k + 1; } }
рдирд┐рд╖реНрдХрд░реНрд╖
рдРрд╕рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмреЙрдпрд░-рдореВрд░ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдРрд╕рд╛ рд╕рдВрд╢реЛрдзрди рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдЕрднреА рднреА рдмрджрддрд░ рд╣реИред рд▓реЗрдХрд┐рди рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдмрд▓ рдСрдлрд╝рд╕реЗрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред