在原来的字符串中前缀与后缀相同,且原来的中间还含有这个子串;
这里加的num【】数组真是太厉害了,可以直接用来判断中间是否有子串;
#include#include #include #include #include using namespace std;const int maxn =1e6+7;int nt[maxn],len;int num[maxn];string str;void get_nt(){ int i=0,k=-1; nt[0]=-1; while(i < len) { if( k==-1 || str[i]==str[k]) nt[++i]=++k; else k=nt[k]; }}int main(){ int find = 1; cin>>str; len =str.length(); get_nt(); for(int i=1;i