Skip to content

Commit 7eaee5a

Browse files
committed
add new solution. didn't pass all tests yet
1 parent 29225c5 commit 7eaee5a

File tree

8 files changed

+68
-0
lines changed

8 files changed

+68
-0
lines changed

py3/hard/is_match/is_match.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
class Solution(object):
2+
def fit(self, s, re_piece, offset, is_next_star):
3+
for i, c in enumerate(re_piece):
4+
if not (
5+
c == "." or
6+
s[i + offset] == "." or
7+
c == s[i + offset] or
8+
(i == len(re_piece) - 1 and is_next_star)
9+
):
10+
return False
11+
return True
12+
13+
def check_match(self, s, rg, rg_i, offset=0):
14+
if rg_i == len(rg):
15+
return len(s) == offset
16+
while offset < len(s):
17+
if self.fit(s, rg[rg_i][0], offset, rg_i + 1 < len(rg)):
18+
offset += max(len(rg[rg_i][0]), 1)
19+
return self.check_match(s, rg, rg_i+1, offset)
20+
elif offset + 1 < len(s) and s[offset+1] == rg[rg_i][1]:
21+
offset += 1
22+
else:
23+
return False
24+
if offset == len(s):
25+
return False
26+
27+
def isMatch(self, s, p):
28+
rg = []
29+
p_sp = p.split("*")
30+
for i, r in enumerate(p_sp):
31+
rg.append([r, p_sp[i-1][len(p_sp[i-1])-1] if i else "-"])
32+
33+
return self.check_match(s, rg, 0)
34+
35+
36+
def main():
37+
a = input()
38+
b = input()
39+
print(Solution().isMatch(a, b))
40+
41+
42+
if __name__ == "__main__":
43+
main()

py3/hard/is_match/link

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
https://leetcode.com/problems/regular-expression-matching/

py3/hard/is_match/test/test1

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"input": "aa\na*",
3+
"output": "True"
4+
}

py3/hard/is_match/test/test2

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"input": "ab\n.*",
3+
"output": "True"
4+
}

py3/hard/is_match/test/test3

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"input": "aab\nc*a*b",
3+
"output": "True"
4+
}

py3/hard/is_match/test/test4

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"input": "mississippi\nmis*is*p*.",
3+
"output": "False"
4+
}

py3/hard/is_match/test/test5

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"input": "aa\na",
3+
"output": "False"
4+
}

py3/hard/is_match/test/test6

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"input": "mississippi\nmis*is*ip*.",
3+
"output": "True"
4+
}

0 commit comments

Comments
 (0)