Python题解
# -*- coding:utf-8 -*-
class Solution:
# s, pattern都是字符串
def match(self, s, pattern):
def matchCore(s, i, pattern, j):
if i == len(s) and j == len(pattern):
return True
if i != len(s) and j == len(pattern):
return False
if j+1 < len(pattern) and pattern[j+1] == "*":
#模式第二个字符是*,且字符串与模式首字符相等,再往下分三种情况;否则,模式后移2位
if (i != len(s) and pattern[j] == s[i]) or (pattern[j] == "." and i != len(s)):
#1.匹配一个 2.匹配一个,后面继续匹配 3.不匹配
return matchCore(s, i+1, pattern, j+2) \
or matchCore(s, i+1, pattern, j) \
or matchCore(s, i, pattern, j+2)
else:
return matchCore(s, i, pattern, j+2)
if (i != len(s) and pattern[j] == s[i]) or (pattern[j] == "." and i != len(s)):
return matchCore(s, i+1, pattern, j+1)
return False
i, j = 0, 0
return matchCore(s, i, pattern, j)
考点
- 考查对字符串的编程能力;
- 考查对正则表达式的理解;
- 考查思维的全面性。要全面考虑普通字符、".“和”*“并分析它们的匹配模式。在测试阶段,要充分考虑普通字符、”.“和”*"三者的排列组合,尽量完备的想出所有可能的测试用例。