题解 | #字符串通配符#

字符串通配符

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

//对于‘*’的递归很晕,后面参考的大佬的代码,分成跳过0字符,跳过1字符,跳过n个字符(即*继续匹配)
#include <stdio.h>
#include <string.h>
int dfs(char* ss1,char* ss2)
{
    int len1=strlen(ss1);
    int len2=strlen(ss2);
    int i=0;
    int j=0;
    for(i=0;i<len1&&j<len2;i++)
    {
        if(ss1[i]=='?')
        j++;
        else if(ss1[i]==ss2[j]||ss1[i]==ss2[j]+32||ss1[i]==ss2[j]-32)
        j++;
        else if(ss1[i]=='*')
        {
            while(ss1[i+1]=='*')
            i++;
            return dfs(ss1+i+1,ss2+j)||dfs(ss1+i+1,ss2+j+1)||dfs(ss1+i,ss2+j+1);            
        }
        else
        return 0;
    }
    if(i==len1&&j==len2)
    return 1;
    else
    return 0;
}
int main() {
    char s1[101] = { 0 };
    char s2[101] = { 0 };
    scanf("%s", s1);
    scanf("%s", s2);
    int len2 = strlen(s2);
    int len1 = strlen(s1);
    int i=0;
    int j=0;
    int result=0;
    while(i<len1||j<len2)
    {
        char ss1[101]={0};
        char ss2[101]={0};
        for(i;i<len1;i++)
        {
            if(s1[i]>='A'&&s1[i]<='Z'||s1[i]>='a'&&s1[i]<='z'||s1[i]>='0'&&s1[i]<='9'||s1[i]=='?'||s1[i]=='*')
            ss1[i]=s1[i];
            else
            break;
        }
        for(j;j<len2;j++)
        {
            if(s2[j]>='A'&&s2[j]<='Z'||s2[j]>='a'&&s2[j]<='z'||s2[j]>='0'&&s2[j]<='9')
            ss2[j]=s2[j];
            else
            break;
        }
        if(s1[i]==s2[j])
        {
            result = dfs(ss1, ss2);
            if(result==0)
            break;
        }
        else {
        result=0;
        break;
        }
        i++;
        j++;
    }
    if(result==1)
    printf("true\n");
    else
    printf("false\n");
    return 0;
}

全部评论

相关推荐

爱读书的放鸽子能手很...:刷个两端实习,冲春招,流水线什么时候不能去
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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