zoukankan      html  css  js  c++  java
  • 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
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    匿名函数 sorted() filter() map() 递归函数
    内置函数
    生成器
    迭代器
    函数
    Linux系统及lvm知识
    nginx设置成开机自动启动服务
    cinder介绍及使用lvm本地存储
    docker私有仓库的搭建
    工作中涉及运维知识点的汇总
  • 原文地址:https://www.cnblogs.com/duan-to-success/p/3470279.html
Copyright © 2011-2022 走看看