■ 题目描述
【字符串匹配】
给你一个字符串数组(每个字符串均由小写字母组成)和一个字符规律(由小写字母和.和*组成),识别数组中哪些字符串可以匹配到字符规律上。
‘.’ 匹配任意单个字符,’*’ 匹配零个或多个前面的那一个元素,所谓匹配,是要涵盖整个字符串的,而不是部分字符串。
输入描述
第一行为空格分割的多个字符串,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))))