P1229遍历问题

一、题目描述

  

 

  

 

 二、题目分析

  刚开始没怎么看懂题目,后面画着画着树就知道了这个原理,其实这个题目就是让我们求根据前序和中序所能得到的树最多有多少棵。而造成两个序列不同树的情况就是单子树的情况,因此我们需要数单子树的个数,答案就是2^n次方怎么数呢?

  如果前序里的字符和后序里的字符相等,且他们的后一个和前一个根相同,那么这棵树就是单子树。

  所以我们只需要遍历两个字符串就可以了

三、代码实现

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 char s1[10010],s2[10010];
 4 int cnt;
 5 int main()
 6 {
 7     int len1,len2;
 8     cin >> s1;
 9     cin >> s2;
10     len1 = strlen(s1);
11     len2 = strlen(s2);
12     for(int i = 0;i < len1 - 1;i++)
13         for(int j = len2 - 1;j >= 1;j--)
14             if(s1[i] == s2[j] && s1[i + 1] == s2[j - 1])
15                 cnt++;
16     long long int ans = 1;
17     // cout << cnt << endl;
18     for(int i = 1;i <= cnt;i++)
19         ans *= 2;
20     cout << ans;
21     return 0;
22 }

 

posted @ 2022-01-20 20:06  scannerkk  阅读(40)  评论(0)    收藏  举报