题解 | #字符串通配符#

字符串通配符

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))

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务