常见面试算法题-字符串匹配

 题目描述

【字符串匹配】

给你一个字符串数组(每个字符串均由小写字母组成)和一个字符规律(由小写字母和.和*组成),识别数组中哪些字符串可以匹配到字符规律上。

‘.’ 匹配任意单个字符,’*’ 匹配零个或多个前面的那一个元素,所谓匹配,是要涵盖整个字符串的,而不是部分字符串。

输入描述

第一行为空格分割的多个字符串,1<单个字符串长度<100,0,1<字符串个数<100

第二行为字符规律,1<字符串个数<100

第二行为字符规律,1<=字符规律长度<=50

不需要考虑异常场景。

输出描述

匹配的字符串在数组中的下标(从0开始),多个匹配时下标升序并用,分割,若均不匹配输出-1

示例1 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

ab aab

.*

输出

0,1

示例2 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

ab abc bsd

.*

输出

0,1,2

示例3 输入输出示例仅供调试,后台判题数据一般不包含示例

输入

avd adb sss as

adb

输出

1

 以下代码为本人原创,可以供大家参考,若有不足之处,感谢指出!!!!

def ismatch(s, p):
    m, n = len(s), len(p)
    dp = [False]*(n+1)
    dp[0] = True
    for j in range(1, n+1):
        if p[j-1] == '*':
            dp[j] = dp[j-2]
    for i in range(1, m+1):
        dp2 = [False]*(n+1)
        for j in range(1, n+1):
            if s[i-1] == p[j-1] or p[j-1] == '.':
                dp2[j] = dp[j-1]
            elif p[j-1] == '*':
                if s[i-1] != p[j-2] and p[j-2] != '.':
                    dp2[j] = dp2[j-2]
                else:
                    dp2[j] = dp2[j-2] | dp[j]
        dp = dp2
    return dp[n]


word = list(input().split())
str1 = input()
ans = []
for i in range(len(word)):
    if ismatch(word[i], str1):
        ans.append(i)
print(','.join(list(map(str, ans))))

  • 23
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心若成风、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值