File tree 1 file changed +11
-8
lines changed
1 file changed +11
-8
lines changed Original file line number Diff line number Diff line change 1
- def matchWordPattern (pattern : str , input_string : str ) -> bool :
1
+ def matchWordPattern (pattern : str , input_string : str ) -> bool :
2
2
"""
3
3
Determine if a given pattern matches a string using backtracking.
4
4
@@ -15,40 +15,43 @@ def matchWordPattern(pattern :str, input_string: str) -> bool:
15
15
>>> matchWordPattern("GG", "PythonJavaPython")
16
16
False
17
17
"""
18
+
18
19
def backtrack (pattern_index , str_index ):
19
20
if pattern_index == len (pattern ) and str_index == len (input_string ):
20
21
return True
21
22
if pattern_index == len (pattern ) or str_index == len (input_string ):
22
23
return False
23
-
24
+
24
25
char = pattern [pattern_index ]
25
-
26
+
26
27
if char in pattern_map :
27
28
mapped_str = pattern_map [char ]
28
29
if input_string .startswith (mapped_str , str_index ):
29
30
return backtrack (pattern_index + 1 , str_index + len (mapped_str ))
30
31
else :
31
32
return False
32
-
33
+
33
34
for end in range (str_index + 1 , len (input_string ) + 1 ):
34
35
substr = input_string [str_index :end ]
35
36
if substr in str_map :
36
37
continue
37
-
38
+
38
39
pattern_map [char ] = substr
39
40
str_map [substr ] = char
40
-
41
+
41
42
if backtrack (pattern_index + 1 , end ):
42
43
return True
43
-
44
+
44
45
del pattern_map [char ]
45
46
del str_map [substr ]
46
47
return False
47
-
48
+
48
49
pattern_map = {}
49
50
str_map = {}
50
51
return backtrack (0 , 0 )
51
52
53
+
52
54
if __name__ == "__main__" :
53
55
import doctest
56
+
54
57
doctest .testmod ()
You can’t perform that action at this time.
0 commit comments