题解 P6872 【[COCI2013-2014#6] VJEKO】

· · 题解

字符串模拟题。

题意比较好理解,就是坑有点多。

下面我来给大家讲一些常见误区:

第一个字符串: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;
}