Wildcard Pattern Matching Java
- Get link
- X
- Other Apps
PROGRAM TO PERFORM WILD CARD MATCHING
import
java.util.Arrays;
public
class
MAIN {
// Function that matches input str with
// given wildcard pattern
static
boolean
strmatch(String str, String pattern,
int
n,
int
m)
{
// empty pattern can only match with
// empty string
if
(m ==
0
)
return
(n ==
0
);
// lookup table for storing results of
// subproblems
boolean
[][] lookup =
new
boolean
[n +
1
][m +
1
];
// initialize lookup table to false
for
(
int
i =
0
; i < n +
1
; i++)
Arrays.fill(lookup[i],
false
);
// empty pattern can match with empty string
lookup[
0
][
0
] =
true
;
// Only '*' can match with empty string
for
(
int
j =
1
; j <= m; j++)
if
(pattern.charAt(j -
1
) ==
'*'
)
lookup[
0
][j] = lookup[
0
][j -
1
];
// fill the table in bottom-up fashion
for
(
int
i =
1
; i <= n; i++)
{
for
(
int
j =
1
; j <= m; j++)
{
// Two cases if we see a '*'
// a) We ignore '*'' character and move
// to next character in the pattern,
// i.e., '*' indicates an empty
// sequence.
// b) '*' character matches with ith
// character in input
if
(pattern.charAt(j -
1
) ==
'*'
)
lookup[i][j] = lookup[i][j -
1
]
|| lookup[i -
1
][j];
// Current characters are considered as
// matching in two cases
// (a) current character of pattern is '?'
// (b) characters actually match
else
if
(pattern.charAt(j -
1
) ==
'?'
|| str.charAt(i -
1
)
== pattern.charAt(j -
1
))
lookup[i][j] = lookup[i -
1
][j -
1
];
// If characters don't match
else
lookup[i][j] =
false
;
}
}
return
lookup[n][m];
}
// Driver code
public
static
void
main(String args[])
{
String str =
"baaabab"
;
String pattern =
"*****ba*****ab"
;
// String pattern = "ba*****ab";
// String pattern = "ba*ab";
// String pattern = "a*ab";
// String pattern = "a*****ab";
// String pattern = "*a*****ab";
// String pattern = "ba*ab****";
// String pattern = "****";
// String pattern = "*";
// String pattern = "aa?ab";
// String pattern = "b*b";
// String pattern = "a*a";
// String pattern = "baaabab";
// String pattern = "?baaabab";
// String pattern = "*baaaba*";
if
(strmatch(str, pattern, str.length(),
pattern.length()))
System.out.println(
"Yes"
);
else
System.out.println(
"No"
);
}
}
OUTPUT:
Yes
- Get link
- X
- Other Apps
Comments
Post a Comment