Java數據構造及算法實例:樸實字符婚配 Brute Force。本站提示廣大學習愛好者:(Java數據構造及算法實例:樸實字符婚配 Brute Force)文章只能為提供參考,不一定能成為您想要的結果。以下是Java數據構造及算法實例:樸實字符婚配 Brute Force正文
/** * 樸實字符串算法經由過程兩層輪回來尋覓子串, * 似乎是一個包括形式的“模板”沿待查文本滑動。 * 算法的思惟是:從主串S的第pos個字符起與形式串停止比擬, * 婚配不勝利時,從主串S的第pos+1個字符從新與形式串停止比擬。 * 假如主串S的長度是n,形式串長度是 m,那末Brute-Force的時光龐雜度是o(m*n)。 * 最壞情形湧現在形式串的子串頻仍湧現在主串S中。 * 固然它的時光龐雜度為o(m*n),但在普通情形下婚配時光為o(m+n), * 是以在現實中它被年夜量應用。 * 該辦法的長處是:算法簡略晴明,便於完成記憶。 * 該辦法的缺陷是:停止了回溯,效力不高,而這些回溯都是沒有需要的。 * 上面是該算法的Java代碼,找到子串的話,前往子串在父串中第一次湧現的地位, * 找不到的話前往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; } }