Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:樸素字符匹配 Brute Force
更新時(shí)間:2015年06月20日 11:02:03 投稿:junjie
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:樸素字符匹配 Brute Force,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
/**
* 樸素字符串算法通過兩層循環(huán)來尋找子串,
* 好像是一個(gè)包含模式的“模板”沿待查文本滑動(dòng)。
* 算法的思想是:從主串S的第pos個(gè)字符起與模式串進(jìn)行比較,
* 匹配不成功時(shí),從主串S的第pos+1個(gè)字符重新與模式串進(jìn)行比較。
* 如果主串S的長度是n,模式串長度是 m,那么Brute-Force的時(shí)間復(fù)雜度是o(m*n)。
* 最壞情況出現(xiàn)在模式串的子串頻繁出現(xiàn)在主串S中。
* 雖然它的時(shí)間復(fù)雜度為o(m*n),但在一般情況下匹配時(shí)間為o(m+n),
* 因此在實(shí)際中它被大量使用。
* 該方法的優(yōu)點(diǎn)是:算法簡單明朗,便于實(shí)現(xiàn)記憶。
* 該方法的缺點(diǎn)是:進(jì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指向主串下一個(gè)位置
for(int j=0; j<patternLength; j++) {
if(waitForMatch.charAt(k) != pattern.charAt(j)) {
break;
}else {
k++;// 指向主串下一個(gè)位置
if(j == patternLength-1) {
return i;
}
}
}
}
// 匹配不成功,返回0
return 0;
}
}
您可能感興趣的文章:
- java數(shù)據(jù)結(jié)構(gòu)與算法之中綴表達(dá)式轉(zhuǎn)為后綴表達(dá)式的方法
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:考拉茲猜想 Collatz Conjecture
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:快速計(jì)算二進(jìn)制數(shù)中1的個(gè)數(shù)(Fast Bit Counting)
- Java數(shù)據(jù)結(jié)構(gòu)及算法實(shí)例:冒泡排序 Bubble Sort
- java數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)之漢諾塔示例
- Java數(shù)據(jù)結(jié)構(gòu)與算法入門實(shí)例詳解
相關(guān)文章
最詳細(xì)的Java循環(huán)結(jié)構(gòu)解析之for循環(huán)教程(適合小白)
:循環(huán)結(jié)構(gòu)是指在程序中需要反復(fù)執(zhí)行某個(gè)功能而設(shè)置的一種程序結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于Java循環(huán)結(jié)構(gòu)解析之for循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼
這篇文章主要介紹了以Spring Boot的方式顯示圖片或下載文件到瀏覽器的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
SpringCloud Eureka自我保護(hù)機(jī)制原理解析
這篇文章主要介紹了SpringCloud Eureka自我保護(hù)機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
vue+springboot+shiro+jwt實(shí)現(xiàn)登錄功能
這篇文章主要介紹了vue+springboot+shiro+jwt實(shí)現(xiàn)登錄功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之高級排序
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之高級排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01

