Java數(shù)據(jù)結(jié)構及算法實例:樸素字符匹配 Brute Force
更新時間:2015年06月20日 11:02:03 投稿:junjie
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構及算法實例:樸素字符匹配 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)結(jié)構解析之for循環(huán)教程(適合小白)
:循環(huán)結(jié)構是指在程序中需要反復執(zhí)行某個功能而設置的一種程序結(jié)構,下面這篇文章主要給大家介紹了關于Java循環(huán)結(jié)構解析之for循環(huán)的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09
以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼
這篇文章主要介紹了以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
vue+springboot+shiro+jwt實現(xiàn)登錄功能
這篇文章主要介紹了vue+springboot+shiro+jwt實現(xiàn)登錄功能,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
帶你了解Java數(shù)據(jù)結(jié)構和算法之高級排序
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構和算法之高級排序,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01

