#include<iostream>
#include<string>
using namespace std;
const int N = 100000, M = 1000000;
int n, m;
int ne[N];
string s, p;
//bf算法
int index_bf(string S, string T) {
int n = S.length();
int m = T.length();
for (int i = 0; i <= n - m; ++i) { // 注意这里i是从0开始的,且只需要遍历到n-m
int j;
for (j = 0; j < m; ++j) { // j也是从0开始的
if (S[i + j] != T[j]) {
break; // 一旦发现不匹配,就跳出内层循环
}
}
if (j == m) { // 如果内层循环完成,说明找到了匹配的子串
return i; // 返回起始位置
}
// 不需要在这里对i进行特别的调整,因为外层循环的i++会在下一次迭代时自然前进
}
return -1; // 如果外层循环完成仍未找到匹配的子串,则返回-1
}
int main() {
cin >> p >> s; // 读取主串和子串
int a = index_bf(p, s); // 调用BF算法查找子串
cout << a << endl; // 输出结果
return 0;
}
//kmp算法
//计算模式串的前缀表next代码
//void get_Next(string s, int ne[])
//{
// int j = 0;
// ne[0] = 0;
// for (int i = 1; i < s.size(); i++)
// {
// while (j > 0 && (s[i] != s[j]))j = ne[j - 1];
// if (s[i] == s[j])j++;
// ne[i] = j;
// }
//}
//
//
进入匹配查找
//int main()
//{
// cin >> n >> p >> m >> s;
// get_Next(p, ne);
// for (int i = 0, j = 0; i < m; i++)
// {
// while (j > 0 && s[i] != p[j])j = ne[j - 1];
// if (s[i] == p[j])j++;
// if (j == n)
// {
// cout << i - n + 1 << " ";
// j = ne[j - 1]; //进行多次判断
// }
// }
// return 0;
//}
KMP代码
于 2024-11-13 20:32:53 首次发布