package string; public class BoyerMoore { static int bm(String text, String searchText) { int pt; // text 커ì int textLen = text.length(); int searchTextLen = searchText.length(); int[] skip = new int[Character.MAX_VALUE + 1]; // a - z ì´ê¸°í for(pt = 0; pt <= Character.MAX_VALUE; pt++) { skip[pt] = searchTextLen; } // ê²ì 문ìì ê±´ëë¸ ì¸ë±ì¤ ê³ì° for(pt = 0; pt <= searchTextLen - 1; pt++) { skip[searchText.charAt(pt)] = searchTextLen - pt - 1; } int pst; // ê²ì í ì¤í¸ 커ì while(pt < textLen) { pst = searchTextLen - 1; // ê²ì í ì¤í¸ì ë§ì§ë§ 문ì while(text.charAt(pt) == searchText.charAt(pst)) { if(pst == 0) return pt; // ê²ì ì±ê³µ pt--; pst--; } pt += (skip[text.charAt(pt)] > searchTextLen - pst) ? skip[text.charAt(pt)] : searchTextLen - pst; } return -1; } public static void main(String[] args) { String text = "ABABCDEFGHA"; String search = "ABC"; System.out.println(bm(text, search) + 1 + "ì¸ë±ì¤ë¶í° ì¼ì¹í©ëë¤."); } }