关于栈有一个很有用的性质,对于出栈序列的每一个元素,该元素后 比该元素先入栈的一定按照降序排列。若入栈的是一串数字例如12345,则21435是一个合法的出栈顺序,每一个元素i后比i小的都是降序排列(因为入栈的数字代表了进栈先后),24153不是合法的,因为对于4,比它小的1和3的顺序不对。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1, s2;
while (cin >> s1 >> s2)
{
int n = s1.size();
int a1[n], a2[n]; //把字母转换成数字处理
for (int i = 0; i < n; ++i)
{
a1[i] = i;
a2[i] = s1.find(s2[i]);
}
int min; bool existless, islegal;
for (int i = 0; i < n; ++i)
{
min = a2[i];
existless = 0;
int j;
for (j = i + 1; j < n; ++j)
if (a2[j] < a2[i]) //是否存在比a[i]小的值
{
min = a2[j];
existless = 1;
break;
}
islegal = 1;
if (existless)
{
for (int k = j + 1; k < n; ++k)
if (a2[k] < a2[i])
{
if (a2[k] < min)
min = a2[k]; //更新min
else
{
islegal = 0;
break;
}
}
}
if (!islegal)
{ printf("NO\n"); break; }
}
if (islegal)
printf("YES\n");
}
system("pause");
return 0;
}