#include <bits/stdc++.h> #define MAXN 100000 using namespace std; string a, b; int next[MAXN]; //****a为主串,b为模式串 void get_next(void) //***获得next数组 { next[] = ; , j=; i<b.size(); i++) { && b[i]!=b[j]) { j=next[j-]; //***求next数组即模式串自身匹配的过程,失配时通过将j后移使其能继续匹配 } if(a[i]==b[j]) //***当前字符匹配成功则继续向后匹配 { j++; } }next[i]=j; } int kmp(void) { get_next(); , j=; i<a.size(); i++) { && a[i]!=b[j]) { j=next[j-]; //****失配时通过将j后移使之能继续往后匹配 } if(a[i]==b[j]) //****当前字符匹配成功则继续往后匹配 { j++; } if(j==b.size()) { ; //****如果匹配成功,返回首字符的下标; } } ; } int main(void) { cin >> a >> b; int ans=kmp(); if(ans) { cout << "YES" << endl << ans << endl; } else { cout << "NO" << endl; } fflush(stdout); ; }