#include <bits/stdc++.h>
#define int long long
#define min(x,y) (x<y?x:y)
#define max(x,y) (x>y?x:y)
using namespace std;
int n,ans=1145141919,ls[100005],rs[100005],sz[100005],f[100005],bo;
string s;
void dfs(int x,int fa){
sz[x]++;
if(s[x]=='1'||s[x]=='3'){
ls[x]=x+sz[x];
dfs(ls[x],x);
sz[x]+=sz[ls[x]];
}
if(s[x]=='2'||s[x]=='3'){
rs[x]=x+sz[x];
dfs(rs[x],x);
sz[x]+=sz[rs[x]];
}
f[x]=fa;
}
int pd(int a,int b){
if(a==1&&b==1){
return (sz[a]-1)*2;
}
if(a>n||b==0)return 1;
// printf("%d %d ",a,b);
int ret=0;
int c=b,op[1005],h=0;
while(c!=a){
op[h++]=(ls[f[c]]==c);
c=f[c];
}
int d=b;
bo=0;int aa3=(sz[a]-sz[b])*2-h;
// printf("%d\n",aa3);
ret=aa3;
while(h){
if(op[h])d=ls[d];
else d=rs[d];
h--;
}
ret=max(ret,pd(b,d));
return ret;
}
int aa2;
signed main(){
cin>>s;
n=s.size();
s=" "+s;
dfs(1,1);
// for(int i=1;i<=n;i++)
// printf("%d %d\n",i,sz[i]);
for(int i=1;i<=n;i++){
aa2=pd(1,i);
// printf("%d\n",aa2);
ans=min(ans,aa2);
}
// puts("");
cout<<ans;
return 0;
}
输入 1313000 ,输出4。
取消注释 printf("%d\n",aa2); 后,输入 1313000 ,输出3。