华为OJ上的,昨天没做题,今天2道。
用数组记录之前匹配的状态。最后遍历数组就行。类似最大公共子串。
#include <string> #include <iostream> using namespace std; int main(){ string src; string des; cin>>src; cin>>des; int len1=src.length(); int len2=des.length(); int arrstr[129]={0}; for(int i=0,j=0;i<len1&&j<len2;){ if(src[i]==des[j]||des[j]=='?'){ if(i==0||j==0) arrstr[i]=1; else arrstr[i]=arrstr[i-1]+1; j++; } else arrstr[i]=0; i++; } for(int i=0;i<len1;i++){ if(arrstr[i]==len2){ for(int j=i-len2+1;j<=i;j++) cout<<src[j]; break; } } return 0; }