根据书上的代码抄一抄
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define rep(i,a,n) for (int i = a; i < n; i ++ )
#define repn(i,a,n) for (int i = a; i <= n; i ++ )
#define pb push_back
#define IOS ios::sync_with_stdio(false); cin.tie(0);cout.tie(0);
typedef long long ll;
typedef pair<int,int> PII;
ll gcd(ll a,ll b) { return b ? gcd(b,a % b) : a; }
const int mod = 1e9+7;
vector<char> first,mid;
int level=0;
void fun(int root,int start,int end, int index){
//前序:根左右,根为前序遍历第一一个数root
//中序:左根右, 在中序遍历中从start到end寻找root,将root左右两边分为左子树,右子树
int i = start;
if(start > end) return;
while(i < end && mid[i] != first[root]) i ++;//i为中序遍历中根的位置
index ++;
if(level < index) level = index;
fun(root + 1, start, i - 1, index);
//左子树根为前序遍历root右边的数,求左子树
fun(root + 1 + i - start, i + 1, end, index);
//i-start为中序遍历左子树大小 ,root+1+(i-start)为前序遍历右子树的根
}
int main() {
int n; cin >> n;
first.resize(n);
mid.resize(n);
rep(i, 0, n) cin >> first[i];
rep(i, 0, n) cin >> mid[i];
fun(0, 0, n - 1, 0);
cout<<level;
return 0;
}