LeetCode \ # 10 정규 표현 식 일치 정규 표현 식 일치
Description: Given an input string (s) and a pattern (p), implement regular expression matching with support for '.' and '*'.
'.' Matches any single character. '*' Matches zero or more of the preceding element. The matching should cover the entire input string (not partial).
Note:
s could be empty and contains only lowercase letters a-z. p could be empty and contains only lowercase letters a-z, and characters like . or *.
Example:
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
제목 설명: 문자열 s 와 문자 규칙 p 를 드 립 니 다. '*' 를 지원 하 는 정규 표현 식 과 일치 하 는 것 을 실현 하 십시오.
'' 임의의 단일 문자 '*' 가 0 개 이상 앞 에 있 는 요소 와 일치 하 는 것 은 일부 문자열 이 아 닌 전체 문자열 s 를 포함 하 는 것 입 니 다.
설명:
s 는 비어 있 을 수 있 으 며 a - z 에서 소문 자 만 포 함 됩 니 다.p 는 비어 있 을 수 있 으 며 a - z 의 소문 자 와 문자, 그리고 * 만 포 함 됩 니 다.
예시: 예시 1:
입력: s = "aa" p = "a" 출력: false 설명: "a" 는 "aa" 전체 문자열 과 일치 할 수 없습니다.
예시 2:
입력: s = "aa" p = "a *" 출력: true 설명: '*' 는 0 개 이상 의 앞 에 있 는 요 소 를 일치 시 킬 수 있 기 때문에 여기 앞 에 있 는 요 소 는 'a' 입 니 다.따라서 문자열 'aa' 는 'a' 로 볼 수 있 습 니 다.
예시 3:
입력: s = "ab" p = ". *" 출력: true 설명: ". *" 는 0 개 이상 ('*') 임 의 문자 (') 와 일치 할 수 있 음 을 표시 합 니 다.
예시 4:
입력: s = "aab" p = "c * a * b" 출력: true 설명: '*' 는 0 개 또는 여러 개 를 표시 하기 때문에 여기 'c' 는 0 개 이 고 'a' 는 한 번 반복 된다.따라서 문자열 'aab' 와 일치 할 수 있 습 니 다.
예시 5:
입력: s = "missisippi" p = "mis * is * p *." 출력: false
생각:
시간 복잡 도 O (mn), 공간 복잡 도 O (mn), n, m 는 각각 s 와 p 의 길이 임 을 알 수 있 습 니 다. 여기 서 dp 두 줄 만 인접 한 것 을 사용 하면 공간 복잡 도 를 O (m) 로 줄 일 수 있 습 니 다.
코드: C + +:
class Solution
{
public:
bool isMatch(string s, string p)
{
int n = s.size(), m = p.size();
bool dp[n + 1][m + 1];
for (int i = 0; i <= n; i++) for(int j = 0; j <= m; j++) dp[i][j] = false;
dp[0][0] = true;
for (int i = 2; i <= m; i++) if (p[i - 1] == '*') dp[0][i] = dp[0][i - 2];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (s[i - 1] == p[j - 1] or p[j - 1] == '.') dp[i][j] = dp[i - 1][j - 1];
if (p[j - 1] == '*') if (j > 1) dp[i][j] = ((p[j - 2] == s[i - 1] or p[j - 2] == '.') and dp[i - 1][j]) or dp[i][j - 2];
}
}
return dp[n][m];
}
};
Java:
class Solution {
public boolean isMatch(String s, String p) {
return s.matches(p);
}
}
Python:
class Solution:
def isMatch(self, s: str, p: str) -> bool:
return re.match(p + '$', s)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.