代码实现
/**
* 暴利搜索的算法
* 找到第一个匹配的位置
* 时间复杂度为O(n*m)
*
* @param str 主串
* @param regex 模式串
* @return -1表示没找到,如果为正整数,则为模式串在主串中出现的位置
*/
static int indexOfByBF(char[] str, char[] regex) {
int n = str.length;//主串的长度设为n
int m = regex.length;//模式串的长度设为m
outer:
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
char strChar = str[i + j];
char regexChar = regex[j];
if (strChar != regexChar) {
continue outer;
}
if (j == m - 1) {
return i;
}
}
}
//到这复杂度是O(n*m),所有字符都扫描过了,都没有找到匹配的
return -1;
}
思想
- 此字符串匹配算法实际上就是暴力匹配
- 模式串从主串第一位开始逐字匹配
- 当没有匹配上,则模式串整体顺着主串的方向向后移一位,然后再从模式串第一个字符开始匹配
- 直至模式串完全匹配上,然后返回