#include<cstdio>
#include<cstring>
#include<stack>//栈,POP push
#include<iostream>//引入头文件
using namespace std;
int main()
{
string s1,s2;//两个要判别的字符串
stack<char>s; //s代表栈,char 字符
while(cin>>s1>>s2)//输入
{
while(!s.empty()) //清空栈
s.pop();
int i=0,j=0;//引入指针i,j
while(j<s2.length())//当j小于s2时
{
if(s1[i]==s2[j])//比较s1和s2相等则继续移动
{
i++;
j++;
}
else if(!s.empty()&&s.top()==s2[j])//如果不相等判断栈是否为空,如果不为空则比较栈的第一个元素与j是否相等
{
s.pop();//如果相等,删除并将指针j移动后一位
j++;
}
else if(i<s1.length())//如果不相等且栈为空或者栈的第一个元素不等于s2[j],就压入栈,
{
s.push(s1[i]);//
i++;//将i后移动一位
}
else
break;//i越界,失败
}
j==s2.length()?cout<<"YES"<<endl:cout<<"NO"<<endl;//判断j的长度,如果与s2长度相同则可行
}
return 0;
}
数据结构之栈的应用
最新推荐文章于 2024-06-11 23:41:51 发布