Java數(shù)據(jù)結構及算法實例:樸素字符匹配 Brute Force
更新時間:2015年06月20日 11:02:03 投稿:junjie
這篇文章主要介紹了Java數(shù)據(jù)結構及算法實例:樸素字符匹配 Brute Force,本文直接給出實例代碼,代碼中包含詳細注釋,需要的朋友可以參考下
/** * 樸素字符串算法通過兩層循環(huán)來尋找子串, * 好像是一個包含模式的“模板”沿待查文本滑動。 * 算法的思想是:從主串S的第pos個字符起與模式串進行比較, * 匹配不成功時,從主串S的第pos+1個字符重新與模式串進行比較。 * 如果主串S的長度是n,模式串長度是 m,那么Brute-Force的時間復雜度是o(m*n)。 * 最壞情況出現(xiàn)在模式串的子串頻繁出現(xiàn)在主串S中。 * 雖然它的時間復雜度為o(m*n),但在一般情況下匹配時間為o(m+n), * 因此在實際中它被大量使用。 * 該方法的優(yōu)點是:算法簡單明朗,便于實現(xiàn)記憶。 * 該方法的缺點是:進行了回溯,效率不高,而這些回溯都是沒有必要的。 * 下面是該算法的Java代碼,找到子串的話,返回子串在父串中第一次出現(xiàn)的位置, * 找不到的話返回0. */ package al; public class BruteForce { public static void main(String[] args) { String waitForMatch = "abbacbabcdabcbec"; String pattern = "abcbe"; BruteForce bruteForce = new BruteForce(); int index = bruteForce.getSubStringIndex(waitForMatch, pattern); System.out.println("Matched index is "+index); } /** * @author * @param waitForMatch 主字符串 * @param pattern 模式字符串 * @return 第一次字符串匹配成功的位置 */ public int getSubStringIndex(String waitForMatch, String pattern){ int stringLength = waitForMatch.length(); int patternLength = pattern.length(); // 從主串開始比較 for(int i=0; i<stringLength; i++) { int k = i; // k指向主串下一個位置 for(int j=0; j<patternLength; j++) { if(waitForMatch.charAt(k) != pattern.charAt(j)) { break; }else { k++;// 指向主串下一個位置 if(j == patternLength-1) { return i; } } } } // 匹配不成功,返回0 return 0; } }
相關文章
最詳細的Java循環(huán)結構解析之for循環(huán)教程(適合小白)
:循環(huán)結構是指在程序中需要反復執(zhí)行某個功能而設置的一種程序結構,下面這篇文章主要給大家介紹了關于Java循環(huán)結構解析之for循環(huán)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼
這篇文章主要介紹了以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01vue+springboot+shiro+jwt實現(xiàn)登錄功能
這篇文章主要介紹了vue+springboot+shiro+jwt實現(xiàn)登錄功能,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04