c++:相同序列(栈和队列)
题目描述
试写一个算法,识别依次读入的一个字符序列是否为形如‘序列1&序列2’模式的字符序列。其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列。输出YES或者NO。
输入
a+b&b+a
输出
YES
样例输入 Copy
1+3&3-1
样例输出 Copy
NO
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char ans[10000],bns[10000],cns[10000];
int i,j,k,l,f;
while(gets(ans)!=NULL)
{
f=0;//统计&的个数(此题只存在一个&)
for(j=i=0;i<strlen(ans);i++)
{
if(ans[i]!='&')
{
bns[j++]=ans[i];
}
else {f++;break;}
}
//&前面的放在bns素组里
for(k=0,l=i+1;l<strlen(ans);l++)
{
if(ans[l]!='&')
{
cns[k++]=ans[l];
}
else
{
f++;break;
}
}
//&前面的放在cns素组里
if(f!=1)
{
printf("NO\n");
continue;
}
//如果有多个&则输出NO
bns[j]=0;cns[k]=0;
if(strlen(bns)!=strlen(cns))
{
printf("NO\n");
continue;
}
//判断两个字符串是否相等
for(i=j-1,l=0;i>=0;i--,l++)
{
if(bns[i]!=cns[l])
{
printf("NO\n");
break;
}
}
if(i<0)
printf("YES\n");
}
return 0;
}