题解 P6872 【[COCI2013-2014#6] VJEKO】
Yukinoshita_Yukino · · 题解
字符串模拟题。
题意比较好理解,就是坑有点多。
下面我来给大家讲一些常见误区:
第一个字符串:q*q
第二个字符串:qq
这样是 DA,因为*可以代表“没有字符”
接下来讲讲我的思路:
首先,两个字符串从下标为1开始,一个一个枚举,一直到str[j]!=str2[j]&&str[j]!='*'
这时候说明这个字符串肯定不符合要求了
然后,两个字符串从后向前枚举,一直到str[j]!=str2[t]&&str[j]!='*'
为止,同样的,这时候也不符合要求了
最后提醒大家:别忘了加长度特判
最后上代码:
#include<bits/stdc++.h>
using namespace std;
char str[1001],str2[1001];
int n,flag,t;
int main()
{
cin>>n;
cin>>str;
for(int i=1;i<=n;i++)
{
cin>>str2;
if(strlen(str)-1>strlen(str2)) {
cout<<"NE"<<endl;
continue;
}
for(int j=0;j<strlen(str);j++)
{
if(str[j]!=str2[j]&&str[j]!='*')
{
flag=1;
break;
}
if(str[j]=='*') break;
}
t=strlen(str2)-1;
for(int j=strlen(str)-1;j>=0&&t>=0;j--)
{
if(str[j]!=str2[t]&&str[j]!='*')
{
flag=1;
break;
}
if(str[j]=='*') break;
t--;
}
if(flag==1) cout<<"NE"<<endl;
else cout<<"DA"<<endl;
flag=0;
}
return 0;
}