//不要被这题吓到,范围已经给出0和m了,根本不需要建立栈
#include<stdio.h>
int main()
{
int n,m,i,length=0,flag=0;
scanf("%d %d ",&n,&m);
for(i=0;i<n;i++)//遍历每列
{
length=0;
flag=0;
char ch;
while((ch=getchar())!='\n')//不用用len计算长度了
{
if(ch=='S')
{
length++;
if(length>m)flag=1;//溢栈了;//我一直疑惑为什么这里不可以break?既然已经溢出栈了直接终止不是更好?后来想了一下因为我这里并不是用数组存储每一列字符而是一个一个来,如果break,那么后面输入的并不是下一列,而是还是接着break后面的字符;于是我加了另一种方法在截图下面,绿色部分为非重复部分
}else{
length--;
if(length<0)flag=1;//栈多扣了;
}
}
if(length==0&&flag==0) printf("YES\n");//如果栈空且没有上述情况
else printf("NO\n");
}
return 0;
}
}#include<stdio.h>
#include<string.h>
int main()
{
int n,m,i,length=0,flag=0;
scanf("%d %d",&n,&m);
getchar();
for(i=0;i<n;i++)
{
length=0;
char a[101];
gets(a);
int len = strlen(a);
for(int i=0;i<len;i++)
{
if(a[i]=='S')
{
length++;
if(length>m){
break;
}
}else{
length--;
if(length<0){
break;
}
}
}
if(length==0) printf("YES\n");//因为no的时刻只有break时刻即length>m和<0 ,yes的情况就是大于等于0和小于m,我们取等于0的情况即yes
else printf("NO\n");
}
return 0;
}