【字符串】樸素匹配算法

/** * 樸素算法 * * 工作流程:字符串逐個匹配,匹配上則返回下標 */ @Slf4j public class NaiveStrClass { public static void main(String[] args) { String originStr = "hello naive java world"; String pattern = "java"; int index = naive(originStr, pattern); int position = advance(originStr, pattern); log.info("index:position ===> {}:{}", index, position); } /** * 樸素匹配(通俗易懂用法) * @param origin 原始主串 * @param pattern 模式 * @return 返回第一個匹配字符索引,匹配不成功則返回-1 */ private static int naive(String origin, String pattern){ int position = 0; while (position < origin.length()){ // 主循環 if(origin.charAt(position) == pattern.charAt(0)){ //第一個字符匹配,則連續匹配,匹配不上則進入下一輪循環匹配 if(position + pattern.length() > origin.length()){ // 防止主字符串溢出 break; } //全模式匹配 if(origin.startsWith(pattern, position)){ return position; } } position++; } return -1; } /** * 樸素匹配:高級用法 * @param origin 主串 * @param pattern 模式 * @return */ private static int advance(String origin, String pattern){ int originIndex = 0; int patternIndex = 0; while (originIndex < origin.length() && patternIndex < pattern.length()){ // 第一個字符匹配 if(origin.charAt(originIndex) == pattern.charAt(patternIndex)){ originIndex++; patternIndex++; }else { // 匹配不上,主串索引還原,繼續下一位匹配,已匹配的位數從0開始匹配 originIndex = originIndex - patternIndex + 1; patternIndex = 0; } if(patternIndex == pattern.length()){ // 完全匹配,則推出 return originIndex - patternIndex; } } return -1; } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章