HDU 1022 Train Problem I

题目链接:HDU1022

题目大意: 给你两个n长度的字符串判断入栈的顺序和出栈的顺序是否一致!

思路(参考了别人):首先用栈把第一个字符串给压入栈中,在每一次压栈的同时用vis【】数组标记为入栈操作! 然后同时判断栈顶元素是否第二个串的首字符,如果判断成功则将栈顶元素抛出,同时指向第二个字符串的指针后移,!最后根据相应的数据,判读,并输出!

代码:

#include<bits/stdc++.h>
using namespace std;
const int N =2000;
int main(){
    int n,vis[N];
    char s[N],s2[N];
    stack<char> a;
    while(cin>>n>>s>>s2){
        while(!a.empty()){    //清空栈!
            a.pop();
        }
        memset(vis,0,sizeof(vis));
        int j=0,k=0;
        for(int i=0;i<n;i++){                //vis记录是进去还是出来!
            a.push(s[i]);
            vis[k++]=1;

            while(!a.empty()&&a.top()==s2[j]){
                a.pop();
                vis[k++]=0;
                j++;
            }
        }
        if(j==n){
            printf("Yes.\n");
            for(int i=0;i<k;i++){
                printf("%s\n",vis[i]?"in":"out");
            }
            printf("FINISH\n");
        }
        else printf("No.\nFINISH\n");
    }
    return 0;

}

猜你喜欢

转载自blog.csdn.net/wrf20162305/article/details/80243315
今日推荐