stack

由N(1 <= N <= 26)个互异字母组成的字符序列依次入栈,判断给出的序列是否可能是出栈序列。

Input

第一行输入正整数T,表示测试案例的组数 
下面依次输入T组测试数据,每组包含两行,第一行表示入栈序列,第二行表示待判定的序列。 

 

Output

YES 表示可能是出栈序列 
NO 表示不可能是出栈序列 

此题比较简单,利用栈的进出规则模拟一下就可。

先一个一个扫描待判定的序列,扫描一个字符就在入栈序列中找到该字符,该字符前面的字符都压入辅助栈中。如果最后辅助栈的栈顶指针为-1则是出栈序列。

此题的代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[27],s2[27],s3[27];//s3为辅助栈
    int n,top,i,k,j;
    scanf("%d",&n);
    while(n--)
    {
        top=-1;
        scanf("%s%s",s1,s2);
        k=strlen(s1);
        j=0;
        for(i=0;i<k;i++)//扫描s2
        {
            if(s2[i]==s3[top]&&top>-1)
                top--;
            else for(;j<k;j++)
                if(s2[i]!=s1[j])//在入栈序列中找到s2[i],并且把前面的那些字符放到辅助栈中
                    s3[++top]=s1[j];
                else {
                    j++;break;
                }
        }
        if(top==-1) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

 

posted @ 2013-12-11 23:06  段少  阅读(276)  评论(0编辑  收藏  举报