-
leetCode - Regular Expression Matching프로그래밍/algorithm 2021. 7. 19. 10:58
문제
Given an input string s and a pattern p, implement regular expression matching with support for '.' and '*' where:
- '.' Matches any single character.
- '*' Matches zero or more of the preceding element.
The matching should cover the entire input string (not partial).
Example 1:
Input: s = "aa", p = "a" Output: false Explanation: "a" does not match the entire string "aa".
Example 2:
Input: s = "aa", p = "a*" Output: true Explanation: '*' means zero or more of the preceding element, 'a'. Therefore, by repeating 'a' once, it becomes "aa".
Example 3:
Input: s = "ab", p = ".*" Output: true Explanation: ".*" means "zero or more (*) of any character (.)".
Example 4:
Input: s = "aab", p = "c*a*b" Output: true Explanation: c can be repeated 0 times, a can be repeated 1 time. Therefore, it matches "aab".
Example 5:
Input: s = "mississippi", p = "mis*is*p*." Output: false
Constraints:
- 1 <= s.length <= 20
- 1 <= p.length <= 30
- s contains only lowercase English letters.
- p contains only lowercase English letters, '.', and '*'.
- It is guaranteed for each appearance of the character '*', there will be a previous valid character to match.
풀이
const isMatch = function (s, p) { if (p.length === 0) { return s.length === 0; } let firstCheck = s.length > 0 && (s[0] === p[0] || p[0] === '.'); if (p.length >= 2 && p[1] === '*') { return isMatch(s, p.substring(2)) || (firstCheck && isMatch(s.substring(1), p)); } else { return firstCheck && isMatch(s.substring(1), p.substring(1)); } };
'프로그래밍 > algorithm' 카테고리의 다른 글
leetCode - Integer to Roman (0) 2021.07.20 leetCode - Container With Most Water (0) 2021.07.20 leetCode - Reverse Integer (0) 2021.07.19 leetCode - ZigZag Conversion (0) 2021.07.19 leetCode - Longest Palindromic Substring(DP) (0) 2021.07.16