-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhard_44_WildCardMatching.java
More file actions
44 lines (41 loc) · 1.38 KB
/
hard_44_WildCardMatching.java
File metadata and controls
44 lines (41 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
* created by zl on 2019/4/26 13:02
*/
public class hard_44_WildCardMatching
{
public boolean isMatch(String str, String pattern) {
int s = 0, p = 0, match = 0, starIdx = -1;
while (s < str.length()){
// advancing both pointers
if (p < pattern.length() && (pattern.charAt(p) == '?' || str.charAt(s) == pattern.charAt(p))){
s++;
p++;
}
// * found, only advancing pattern pointer
else if (p < pattern.length() && pattern.charAt(p) == '*')
{
starIdx = p;
match = s;
p++;
}
// last pattern pointer was *, advancing string pointer
else if (starIdx != -1)
{
p = starIdx + 1;
match++;
s = match;
}
//current pattern pointer is not star, last patter pointer was not *
//characters do not match
else return false;
}
//check for remaining characters in pattern
while (p < pattern.length() && pattern.charAt(p) == '*')
p++;
return p == pattern.length();
}
public static void main(String[] args) {
hard_44_WildCardMatching wildCardMatching = new hard_44_WildCardMatching();
wildCardMatching.isMatch("aacabacd","a*acd");
}
}