?? 什么是BF算法
BF算法,即暴力算法,是普通的模式匹配算法,BF算法的思想就是將目標串S的第一個與模式串T的第一個字符串進行匹配,若相等,則繼續比較S的第二個字符和T的第二個字符;若不相等,則比較S的第二個字符和T的第一個字符,依次比較下去,直到得出最后的匹配結果,BF算法是一種蠻力算法。
??題目:
給出字符串str作為主串,然后給出子串sub,查找子串是否在主串中出現,若出現返回主串中的第一個匹配的下標,否則返回-1。
??圖解演示:
假設:
主串:a b a b c a b c d a b c d e
子串:a b c d
給定i,j 記錄字符串下標
🌏算法思想:
主串的第一個字符和子串的第一個字符進行匹配,若相等,繼續匹配主串的第二個字符和子串的第二個字符,即i++,j++;若不想等,主串回溯到第一個字符的下一個字符,子串回溯到0,即i = i - j + 1,j = 0;依次進行,直到匹配成功,返回i - j ;若失敗,返回==-1==;
🌼算法代碼:
public class BF {public static int bF(String str,String sub) {if(str==null || sub == null) {return -1;}int lenStr = str.length();int lenSub = sub.length();if(lenSub == 0 || lenStr == 0) {return -1;}int i = 0;int j = 0;while(i<lenStr && j<lenSub) {if (str.charAt(i) == sub.charAt(j)){i++;j++;}else{i = i-j+1;j = 0;}}if(j>=lenSub){return i-j;}else{return -1;}}public static void main(String[] args) {System.out.println(bF("ababcabcdabcde","abcd"));System.out.println(bF("ababcabcdabcde","abcdf"));System.out.println(bF("ababcabcdabcde","abcde"));}
}
運行結果
5
-1
9