题解 | #字符串通配符#

字符串通配符

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

'''
这题采用bp表格去做实在过于巧妙
纵向是带有通配符的字符串matching(m),横向是需要匹配的字符串str1(s),表格中的值是布尔值
bp表格中第0行所有列与第0列所有行的值均可以提前判断出
每个表格中其他空格有四种情况,一行一行的更新:
1、matching[i-1].lower()==str1[j-1].lower()时:bp[i][j]=bp[i-1][j-1]
2、matching[i-1].lower()!=str1[j-1].lower()时:bp[i][j]=False
3、m[i-1]=='?' and s[j-1].isalnum()时:bp[i][j]=bp[i-1][j-1]
4、m[i-1]=='*'时:bp[i][j]=bp[i-1][j] or bp[i][j-1]


'''

while True:
    try:
        matching=input()
        str1=input()

        # 创建初始值全是False的bp表格
        bp=[[False for _ in range(len(str1)+1)] for _ in range(len(matching)+1)]
        # 更新可以提前判断的参数,方便后面迭代更新
        bp[0][0]=True
        for i in range(1,len(matching)+1):
            if matching[i-1]=='?' or matching[i-1]=='*':
                bp[i][0]=True
            else:
                break

        # 可以提前判断的参数已经更新完成,现在迭代更新表格中的其他值
        for i in range(1,len(matching)+1):
            for j in range(1,len(str1)+1):
                if matching[i-1].lower()==str1[j-1].lower():# 注意不区分大小写
                    bp[i][j]=bp[i-1][j-1]
                elif matching[i-1]=='?' and str1[j-1].isalnum():
                    bp[i][j]=bp[i-1][j-1]
                elif matching[i-1]=='*':
                    bp[i][j]=bp[i-1][j] or bp[i][j-1]

        if bp[len(matching)][len(str1)]:
            print('true')
        else:
            print('false')
    except:
        break

【牛客站内】华为机试题练习记录

全部评论
print('tql')
1 回复 分享
发布于 2023-04-18 22:21 江苏

相关推荐

泽哥的小屋:目前的简历结构有些杂乱,重点不够突出,HR在短时间内可能抓不住你的核心优势。以下是我针对运营方向(电商运营/用户运营/产品运营等)给出的具体修改建议,你可以照着调整。 1.目前内容偏多,建议精简到一页,删掉冗余描述 2. 保留学校、专业、GPA/排名、奖学金,删掉“核心能力”里的大段描述(这部分可以放到技能或总结里) 3. 闲鱼店铺运营是最大亮点,完全匹配电商运营/用户运营。建议独立成段,并强化运营动作和结果。原文偏流水账,可以拆成3-4个小点,用数据说话。 4. 校园经历这部分可以合并,挑2-3个最有代表性的,用运营语言改写。 5. 生物信息学项目与运营关联较弱,但可以突出数据分析能力。建议改写为强调数据清洗、可视化、分析等技能,并说明这些能力如何用于运营决策 6. 在简历顶部可以加一句简短的个人总结,例如: 具备数据分析能力和闲鱼电商实战经验的运营新人,擅长从0到1项目落地与用户运营,追求用数据驱动增长 还有其他问题可以私信咨询我
非技术求职现状
点赞 评论 收藏
分享
评论
6
1
分享

创作者周榜

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