题解 | #字符串通配符#

字符串通配符

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

想了老半天的办法,最后时间复杂度排名是第一 let a = readline().toLowerCase() let b = readline().toLowerCase() function isMatch(a,b){ if(a.length === 0){ return true } let i = 0 for(let j =0;j<b.length;j++){ if(a[i] === b[j]){ // print(i,j,'相等') i++

    }else if(a[i] === '?'){
        if(/[a-z0-9]/.test(b[j])){
            i++
        }else{
            return false
        }
    }else if(a[i] === '*'){
// 需要解决*什么时候匹配 什么时候不匹配 不能简单以为下一个字符能相等就不匹配了
// 要结合后面的字符能不能匹配到 后面的字符能不能匹配? 可以继续调用这个方法
// 假设后面的字符全部能匹配上 那么此处*不匹配
// 假设后面的字符不能匹配上 不能先选择 否则时间太长 应该直接从字符串尾部开始匹配

// 找到第一个尾部可以匹配上的字符串 直接把这个地方的j赋值给j let c = a.substr(i+1) if( c.length > 0 && c[c.length -1] !== b[b.length -1] && c[c.length -1] !=='*' && c[c.length -1] !=='?'){ return false } for(let k = b.length -1;k >= j;k--){ let d = b.substr(k) if(isMatch(c,d)){ return true } } return false }else{ return false } } if(i < a.length){ return false }else{ return true }

}

print(isMatch(a,b))

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-01 13:13
ecece:这么明目张胆虚报就业率啊
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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