括号匹配(数组链表模拟)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e5+7;
struct node{int l,r;}p[maxn];
int n,m,pos,a[maxn],d[maxn],len,now=0;
char s1[maxn],s2[maxn];
int main()
{
    scanf("%d%d%d",&n,&m,&pos);
    scanf("%s",s1+1);len=strlen(s1+1);
    for(int i=0;i<=n+1;i++)p[i].l=i-1,p[i].r=i+1;
    for(int i=1;i<=len;i++)
    {
        if(s1[i]=='(')a[now++]=i;
        else d[i]=a[--now],d[a[now]]=i;
    }
    scanf("%s",s2+1);
    for(int i=1;i<=m;i++)
    {
        if(s2[i]=='R')pos=p[pos].r;
        else if(s2[i]=='L')pos=p[pos].l;
        else
        {
            int l=min(d[pos],pos);
            int r=max(d[pos],pos);
            p[p[l].l].r=p[r].r;
            p[p[r].r].l=p[l].l;
            pos=p[r].r;
            if(pos==n+1)pos=p[n+1].l;
            if(pos==0)pos=p[0].r;
        }
    }
    int pos=p[0].r;
    while(pos!=n+1)
    {
        cout<<s1[pos];
        pos=p[pos].r;
    }
    cout<<endl;
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/klaycf/p/9794040.html