#include
using namespace std;
string a,b; //a是左中右;b是中左右;
void dfs(int l1,int l2,int l3,int l4) { //l1 and l2是左中右;l3 and l4是中左右;
if(l2<l1||l4<l3) { //边界;
return ;
} else {
int i=a.find(b[l3]);
dfs(l1,i-1,l3+1,l3+i-l1);//左子树; l3向后移一位;i-l1是左子树个数;
dfs(i+1,l2,l3+i-l1+1,l4);//右子树;
cout<<a[i];
}
}
int main() {
cin>>a>>b;//a是左中右;b是中左右;以b为边界;
int l=b.length()-1;
dfs(0,l,0,l); //0-a.lenght-1;
return 0;
}
#include
using namespace std;
string a,b; //a是左中右;b是中左右;
void dfs(int l1,int l2,int l3,int l4) { //l1 and l2是左中右;l3 and l4是中左右;
int i=a.find(b[l4]);
cout<<b[l4];//中左右
if(i>l1)dfs(l1,i-1,l3,l4-(l2-i)-1);//左子树;l2-i是右子树个数;
if(i<l2)dfs(i+1,l2,l4-(l2-i),l4-1);//右子树;l2-i是右子树个数;
}
int main() {
cin>>a>>b;//a是左中右;b是中左右;以b为边界;
int l=b.length()-1;
dfs(0,l,0,l); //0-a.lenght-1;
return 0;
}
但不同的是:
dfs(l1,i-1,l3+1,l3+(i-l1));//左子树; l3向后移一位;i-l1是左子树个数;
dfs(i+1,l2,l3+(i-l1)+1,l4);//右子树;
if(i>l1)dfs(l1,i-1,l3,l4-(l2-i)-1);//左子树;l2-i是右子树个数;
if(i<l2)dfs(i+1,l2,l4-(l2-i),l4-1);//右子树;l2-i是右子树个数;
观察一下这段代码:
可以发现是十分相似;一个是相加,一个是相减。这是因为他们一个是前序与中序;一个是前序与中序;
#include
using namespace std;
int main(){
string a,b;
cin>>a>>b;
int ans=0;
int la=a.length(),lb=b.length();
for(int i=0;i<la;i++){
for(int j=1;j<lb;j++){
if(a[i]==b[j]&&a[i+1]==b[j-1])ans++;
}
}
cout<<ans<<endl;
return 0;
}