题解 | #字符串通配符#

字符串通配符

https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036

//本题采用递归思路似乎更加复杂,暴力判断的时间复杂度和递归相差不大,看上去更容易理解
#include <stdio.h>
#include<string.h>
int main()
{
    char arr1[100],arr2[100];
    gets(arr1);
    gets(arr2);
    int sz1=strlen(arr1),sz2=strlen(arr2),i=0,j=0,flag=0;
    for(i=0;i<sz2;i++)
    {
        if(!((arr2[i]>='0'&&arr2[i]<='9')||(arr2[i]>='a'&&arr2[i]<='z')||(arr2[i]>='A'&&arr2[i]<='Z')||(arr2[i]=='.')))
        {
            printf("false\n");
            return 0;
        }
        if(arr2[i]>='A'&&arr2[i]<='Z')
        {
            arr2[i]+=32;
        }
    }
    for(i=0;i<sz1;i++)
    {
        if(arr1[i]>='A'&&arr1[i]<='Z')
        {
            arr1[i]+=32;
        }
    }
    for(i=0;i<sz1;i++)
    {
        if((arr1[i]>='0'&&arr1[i]<='9')||(arr1[i]>='a'&&arr1[i]<='z')||(arr1[i]>='A'&&arr1[i]<='Z')||(arr1[i]=='.'))
        {
            if(flag==1)
            {
                while(arr1[i]!=arr2[j]&&j<sz2)
                {
                    flag=0;
                    j++;
                }
                while(arr1[i]==arr2[j]&&j<sz2)
                {
                    flag=0;
                    j++;
                }
                if(j==sz2&&arr1[i]!=arr2[sz2-1])
                {
                    printf("false\n");
                    return 0;
                }
                else if(j==sz2&&arr1[i]==arr2[sz2-1]&&i!=sz1-1&&arr1[sz1-1]!='*')
                {
                    printf("false\n");
                    return 0;
                }
                else if(j==sz2&&i!=sz1-1)
                {
                    if(arr1[i]!='*'&&i<sz1)
                    {
                        printf("false\n");
                        return 0;
                    }
                    else
                    {
                        i++;
                    }
                }
            }
            else
            {
                if(arr1[i]==arr2[j]&&j<sz2)
                {
                    j++;
                    continue;
                }
                else
                {
                    printf("false\n");
                    return 0;
                }
            }
        }
        else if(arr1[i]=='?')
        {
            j++;
            continue;
        }
        else if(arr1[i]=='*')
        {
            flag=1;
            continue;
        }
        else
        {
            printf("false\n");
            return 0;
        }
    }
    if(arr1[sz1-1]!='*'&&j<sz2)
    {
        printf("false\n");
        return 0;
    }
    printf("true\n");
    return 0;
}

全部评论

相关推荐

评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务