Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 5303 Accepted: 3162

  这一题相当得简单只要正反比较两次即可,运用队列表示正向的,用栈表示反向的

代码:

 

1 #include<stdio.h>
2 #include<queue>
3 #include<stack>
4  using namespace std;
5  int main()
6 {
7 int t,i,mark;
8 char s1[105],s2[105];
9
10 scanf("%d",&t);
11 while(t--)
12 {
13 mark=0;
14 scanf("%s%s",s1,s2);
15 queue<char> qu;
16 stack<char> st;
17 for(i=0;s2[i]!='\0';i++)
18 {
19 st.push(s2[i]);
20 qu.push(s2[i]);
21 }
22 for(i=0;s1[i]!='\0';i++)
23 {
24 char x,y;
25 x=st.top();
26 y=qu.front();
27 if(x==s1[i])
28 st.pop();
29 if(st.empty())
30 {
31 mark=1;
32 break;
33 }
34 if(y==s1[i])
35 qu.pop();
36 if(qu.empty())
37 {
38 mark=1;
39 break;
40 }
41 }
42 if(mark)
43 printf("YES\n");
44 else
45 printf("NO\n");
46 }
47 return 0;
48 }
49