长  短  
s   t  

int i=0,j=0,n=s.size(),m=t.size();

while (i<n && j<m){ //把i和j同时做循环了 
	if(s[i] == '?'){
		s[i] = t[j];
		i++,j++;
	}else if(s[i]==t[j]) i++,j++;
	else i++;
} 
if(j!=m) cout<<no;
else{
	for(int i=0;i<n;i++) if(s[i]=='?') s[i] = 'a';
	cout <<yes<<endl;
	cout << s<<ednl;
	
}

for循环  

两个字符串 
一个有可能长的(有的字符是万能的)
一个短的(字符是固定的)

问你短的在长的里有没有出现

看短的是不是长的子串 
01234567
adaaddaa 8
长字符串里面的字符都要当再做开头和短的去比 
dad  3 
 p = 1;
for(int i=0;i<=s1.size-s2.size();i++){ //能拿到长的每一个字符 
	int x = i,flag = 1;//承接一下 不能改i 
	string s3 = s1;
	for(int j=0;j<s2.size();j++){ //短的 
		if (s3[x]== s2[j] || s3[x]=='?'){
			x++;
			s3[x] = s2[j];
		}else{
			flag = 0; //失败了 
			s3 = s1; //如果改不对 重置  
			break;
		} 
	}
	if(flag == 1){ //输出yes + 修改过后的字符串 
	    p = 0;
		cout<<"yes"<<endl;
		//把s3遍历一遍 把所有的? 改成随便一个字符  
 		cout <<s3<<endl; //可能有? 没改完  
 		break;
	} 
}
if(p==1){
	NO ;
}

0 条评论

目前还没有评论...

信息

ID
66
时间
1000ms
内存
256MiB
难度
7
标签
递交数
56
已通过
13
上传者