using
System;
class
GFG {
static
bool
isMatch(
string
text,
string
pattern)
{
if
(text ==
null
|| pattern ==
null
) {
return
false
;
}
int
N = text.Length;
int
M = pattern.Length;
bool
[, ] dp =
new
bool
[N + 1, M + 1];
dp[0, 0] =
true
;
for
(
int
i = 0; i < M; i++) {
if
(pattern[i] ==
'*'
&& dp[0, i - 1]) {
dp[0, i + 1] =
true
;
}
}
for
(
int
i = 0; i < N; i++) {
for
(
int
j = 0; j < M; j++) {
if
(pattern[j] ==
'.'
) {
dp[i + 1, j + 1] = dp[i, j];
}
if
(pattern[j] == text[i]) {
dp[i + 1, j + 1] = dp[i, j];
}
if
(pattern[j] ==
'*'
) {
if
(pattern[j - 1] != text[i]
&& pattern[j - 1] !=
'.'
) {
dp[i + 1, j + 1] = dp[i + 1, j - 1];
}
else
{
dp[i + 1, j + 1]
= (dp[i + 1, j] || dp[i, j + 1]
|| dp[i + 1, j - 1]);
}
}
}
}
return
dp[N, M];
}
public
static
void
Main()
{
string
text =
"geeksforgeeks"
;
string
pattern =
"ge*ksforgeeks"
;
if
(isMatch(text, pattern)) {
Console.WriteLine(
"Yes"
);
}
else
{
Console.WriteLine(
"No"
);
}
}
}