今天做到了之前做过的一个题目,还是被卡了一会,主要是思路不够清晰。
上一波用stack的代码:主要思路是,如果栈为空,压栈,如果栈不为空,那么栈顶元素不相同压栈,剩下的就是一个循环比较,看看是不是相等,相等就pop,直到遇到不等或者栈空。
代码:#include<iostream>
#include<cstdio>
#include<string.h>
#include<stack>
using namespace std;
stack<int> sk ;
char c[10000];
char b[10000];
int control[10000] ;
int main(){
int n;
while(~scanf("%d %s %s",&n,&c,&b))
{
while(!sk.empty())
sk.pop();
memset(control,0,sizeof(control));
int index = 0;
for(int i = 0,j = 0 ; i < n ; i ++)
{
if(!sk.empty())
{
if(b[j]!=sk.top())
{
control[index++]=0;
sk.push(c[i]);
}
}
else
{
sk.push(c[i]);
control[index++]=0;
}
while(!sk.empty()&&b[j]==sk.top())
{
control[index++]=1;
sk.pop();
j++;
}
}
if(sk.empty())
{
printf("Yes.\n");
for(int i = 0 ; i < index; i ++)
{
if(control[i]==0)
printf("in\n");
else
printf("out\n");
}
printf("FINISH\n");
}else {
printf("No.\n");
printf("FINISH\n");
}
}
}