Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jianminchen/467764b5e720f80201954fd5f8d666d8 to your computer and use it in GitHub Desktop.
Save jianminchen/467764b5e720f80201954fd5f8d666d8 to your computer and use it in GitHub Desktop.
Leetcode 10 - regular expression match - timeout problem
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StringMatching
{
/// <summary>
/// Leetcode 10: Regular Expression Matching
/// </summary>
class Program
{
static void Main(string[] args)
{
var result = IsMatch("aa", "aa");
}
public static bool IsMatch(string text, string pattern)
{
if( text == null || pattern == null)
{
return false;
}
if (pattern.Length == 1 && text.Length == 0)
{
return false; // "", "a" return false
}
if (pattern.Length == 1 && text.Length == 1 && pattern[0] == '.')
{
return true; // # "a" "." return true
}
// test case: "" "a*"
if (pattern.Length <= 1)
{
return text == pattern; // # "a" "a" pattern .
}
// test case: "","a*"
var test_pattern = pattern[0]; //#
bool isStar = pattern[1] == '*';
bool firstCharMatching = text.Length > 0 &&
(test_pattern == '.' || text[0] == test_pattern);
bool match = false;
if (isStar)
{
match = IsMatch(text, pattern.Substring(2)); // repeat 0 times
if (firstCharMatching)
{
// repeat at least one time
match |= IsMatch(text.Substring(1), pattern);
}
}
else if (firstCharMatching)
{
match |= IsMatch(text.Substring(1), pattern.Substring(1));
}
return match;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment