题目描述
给你两个字符串,一个S,一个T,现在请你判断一下能否从字符串S种找到字符串T? 如果可以的话,请输出S中T的起始位置,如果不能请输出-1
输入
题目有多组测试样例,
每组第一行输入字符串S
第二行输入字符串T
题目保证字符串中没有空格
输出
输出S中T的起始位置,不存在请输出-1
如果有多种答案,请输出第一次出现的起始位置
样例输入 Copy
abaacababcac
ababc
abc
d
样例输出 Copy
6
-1
下面的图片是为了更好的理解代码
#include<bits/stdc++.h>
using namespace std;
char s1[1000005];
char s2[1000005];
int ans[1000005];//ans存//求它们的最长公共前后缀的数
int n,m,flag;// n,m 表示两个字符串的长度
void table(){
ans[0]=0;
int i=1;
int len=0;//最长公共前后缀的数
while(i<m){
if(s2[i]==s2[len]){
//如果最后一个字符和最长公共前后缀的后一个字符相同
len++;
ans[i]=len;
i++;
}else {
if(len > 0){
len=ans[len - 1];
}else {
ans[i] = len;
i ++;
}
}
}
f