改一个符号就玄学了?
查看原帖
改一个符号就玄学了?
215573
zythonc楼主2020/6/23 20:08
AC:100
#include<iostream>
#include<cstring>
using namespace std;
int next[100001];
string m,s;
void getnext(){
	next[0]=-1;
	for(int i=0,j=-1;i<=s.length();){
		if(j==-1||s[i]==s[j])
			next[++i]=++j;
		else
			j=next[j];
	}
}
int main(){
	cin>>m>>s;
	getnext();
	int l=0,r=0;
	while(l<m.length()){
		if(r==-1||m[l]==s[r])
			l++,r++;
		else
			r=next[r];
		if(r==s.length()){
			cout<<l-s.length()+1<<"\n";
			r=next[r];
		}
	}
	for(int i=1;i<=s.length();i++){
		cout<<next[i]<<" ";
	}
}
样例都没过去
#include<iostream>
#include<cstring>
using namespace std;
int next[100001];
string m,s;
void getnext(){
	next[0]=-1;
	for(int i=0,j=-1;i<=s.length();){
		if(j==-1||s[i]==s[j])
			next[++i]=++j;
		else
			j=next[j];
	}
}
int main(){
	cin>>m>>s;
	getnext();
	int l=0,r=0;
	while(l<m.length()){
		if(r==-1||m[l]==s[r])
			l++,r++;
		else
			r=next[r];
		if(r>=s.length()){
			cout<<l-s.length()+1<<"\n";
			r=next[r];
		}
	}
	for(int i=1;i<=s.length();i++){
		cout<<next[i]<<" ";
	}
}

两个代码的唯一不同就是主串与模式串匹配中

一个是

if(r==s.length())

结果AC

另一个

if(r>=s.length())

就玄学了=-=

本蒟蒻没有找到越界等状况 (可能是眼瞎) 求大佬解答

2020/6/23 20:08
加载中...