想写一下sunday算法的 可就是过不了测试点4 求教
  • 板块B2118 验证子串
  • 楼主wwwzne
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/10 20:14
  • 上次更新2023/11/2 14:36:32
查看原帖
想写一下sunday算法的 可就是过不了测试点4 求教
1021654
wwwzne楼主2023/10/10 20:14
#include<bits/stdc++.h>
using namespace std;
map<char,int> p1;
int main(){
	string s1,s2;
	cin>>s1>>s2;
	if(s1.size()<s2.size()){
		swap(s1,s2);
	}
	string s11,s22(s2);
	//cout<<"第一串:"<<s1.size()<<"第二串"<<s2.size()<<endl; 
	for(auto it:s1){
		 if (s11.find(it) == string::npos) {
            s11.push_back(it);
        }
	}
	for(auto it:s11){
		p1.insert(make_pair(it,s2.size()+1));
	}
	for(auto it:s22){
		int dd=s22.size()-s22.find(it);
		s22.replace(s22.find(it),1," ");
		if(p1[it]==s22.size()+1){
			p1[it]=dd;
		}else if(dd<p1[it]){
			p1[it]=dd;
		}	
	}
	
	for(auto it = p1.begin(); it != p1.end(); ++it){
	//	cout<<it->first<<" "<<it->second<<endl;
	}
	int d=0,i;
	for(i=0;i<s2.size();i++){
		//cout<<d<<"d"<<endl;
		if(s1[d]==s2[i]){
			d++;
		}else{
			if(d+s2.size()>=s1.size()){
				break;
			}
			d+=p1[s1[d+s2.size()]];
			i=-1;
		}
	}
	if(i==s2.size()){
		cout<<s2<<" is substring of "<<s1;
	}else{
		cout<<"No substring";
	}
	//cout<<d-s2.size()+1<<endl;;
	return 0;
} 
2023/10/10 20:14
加载中...