您的位置:首页 > 大数据 > 人工智能

Train Problem——判断输出序列是否是输入序列的出栈顺序

2011-01-08 12:11 316 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1022



#include <iostream>
#include <stack>
using namespace std;
void TestIsStackSequence(char *in, char *out);
int main()
{
int n;
char in[10];
char out[10];
while (scanf("%d %s %s", &n, in, out) != EOF)
{
TestIsStackSequence(in, out);
}
return 0;
}
/************************************************************************/
/* 思路:遍历输入序列in的每一个元素,并将其插入到栈s中,并且比较栈顶元素与输出序列第j位置的元素,
若相等栈顶元素出栈,j++,  若栈为空,跳出循环,进行下次遍历。
/************************************************************************/
//参数in为输出的序列,out为输出的序列
void TestIsStackSequence(char *in, char *out)
{
int len_in = strlen(in);
int len_out = strlen(out);
int *inOrder = new int[len_in];
int *outOrder = new int[len_out];
int *arr = new int[len_in * 2]; //存放是入栈还是出栈的标识(1:表示入栈,0:表示出栈)
int i, j, k;
for (i=0; i<len_in; i++) //将字符串转换成int数字,其实没必要的
{
inOrder[i] = in[i] - '0';
outOrder[i] = out[i] - '0';
}
stack<int> s;
i = j = k = 0;
while(i < len_in) //遍历输入序列
{
s.push(inOrder[i++]);
arr[k++] = 1;//表示入栈
while (s.top() == outOrder[j]) //入栈顶元素与输出序列第j位置的元素相同,进行弹出操作
{
s.pop();
arr[k++] = 0; //表示出栈
j++;
if (s.empty()) //如栈为空,跳出当前循环进行下次
{
break;
}
}
}

if (!s.empty()) //若非空,失败
{
cout<<"No./nFINISH"<<endl;
}
else //成功
{
cout<<"Yes."<<endl;
for (i=0; i<len_in * 2; ++i)
{
if (arr[i] == 1)
{
cout<<"in"<<endl;
}
else
{
cout<<"out"<<endl;
}
}
cout<<"FINISH"<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐