#include <iostream>
using namespace std;
const int N = 1010;
int n[N];
string str, ptr;
void get_next(string ptr) {
n[0] = -1;
//l代表当前字串的公共前后缀的最大长度
//r代表next数组的下标
for(int l = 0, r = 1; r < ptr.size(); r ++) {
//前面有公共前后缀但是当前不匹配
while(l > 0 && ptr[l] != ptr[r])
l = n[l - 1]; //回退
if(ptr[l] == ptr[r]) l ++;
n[r] = l;
}
}
//返回下标
int kmp(string str, string ptr) {
int i = 0, j = 0;
//不定义成int类型与str.size()比较会有bug
//int s = str.size(), p = ptr.size();
while(i < (int)str.size() && j < (int)ptr.size()) {
if(j == -1 || str[i] == ptr[j]) {
i ++, j ++;
} else {
j = n[j];
}
}
if(j == (int)ptr.size()) return i - j;
else return -1;
}
int main() {
cin >> str >> ptr;
get_next(ptr);
cout << kmp(str, ptr) << endl;
return 0;
}
04-15