1 /*虽然题目说要用树形DP或者搜索,但是如果对树的结构了解够深的话,也可以直接做。
2 很明显,已知一棵二叉树的前序遍历和后序遍历,判断中序遍历时,其可能性只与没有兄弟节点的叶节点的位置有关。
3 假设没有兄弟节点的叶节点共有n个,则可能性边有2^n个。(就不证明了)
4 那么,如何计算n的值呢?
5 下面有一个性质:
6 一棵二叉树的前序遍历a1a2a3...ai和后序遍历b1b2b3...bi有一种关系:
7 没有兄弟节点的叶节点的根 在a序列下标为i, 在b序列下标为j
8 则有 a[i-1] == b[j+1]
9 这是因为当根只有一棵子树时,前序和后序遍历都是先遍历它的孩子,而且是唯一的一个孩子,所以相对位置是一样的。
10 */
11 #include<iostream>
12 using namespace std;
13 string pre,hou;
14 int lenpre,lenhou;
15 int ans=0;
16 int main()
17 {
18 cin>>pre>>hou;
19 lenpre=pre.length()-1;
20 lenhou=hou.length()-1;
21 for(int i=1;i<=lenpre;++i)
22 for(int j=0;j<=lenhou-1;++j)
23 if(pre[i]==hou[j]&&pre[i-1]==hou[j+1])
24 ans++;
25 cout<<(long long)(1<<ans)<<endl;
26 return 0;
27 }