leetcode * * 10. 정규 표현 식 일치 (연구 대기)
* * 10. 정규 표현 식 일치 * * 44. 어댑터 일치
문자열 s 와 문자 규칙 p 를 드 립 니 다. '..' 와 '*' 를 지원 하 는 정규 표현 식 이 일치 하 는 것 을 실현 하 십시오.
'.' 일치 하 는 임의의 단일 문자 '*' 는 0 개 이상 의 앞 에 있 는 요소 와 일치 합 니 다. 일치 하 는 것 은 일부 문자열 이 아 닌 전체 문자열 s 를 포함 하 는 것 입 니 다.
설명: s 는 비어 있 을 수 있 으 며 a - z 에서 소문 자로 만 포 함 됩 니 다.p 는 비어 있 을 수 있 으 며 a - z 의 소문 자 와 문자, 그리고 * 만 포 함 됩 니 다.
예시 1:
:
s = "aa"
p = "a"
: false
: "a" "aa" 。
예시 2:
:
s = "aa"
p = "a*"
: true
: '*' , 'a'。 , "aa" 'a' 。
예시 3:
:
s = "ab"
p = ".*"
: true
: ".*" ('*') ('.')。
예시 4:
:
s = "aab"
p = "c*a*b"
: true
: '*' , 'c' 0 , 'a' 。 "aab"。
예시 5:
:
s = "mississippi"
p = "mis*is*p*."
: false
[문제 풀이 사고 1] 동태 기획
class Solution {
public boolean isMatch(String s, String p) {
int m = s.length();
int n = p.length();
boolean[][] f = new boolean[m + 1][n + 1];
f[0][0] = true;
for (int i = 0; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (p.charAt(j - 1) == '*') {
f[i][j] = f[i][j - 2];
if (matches(s, p, i, j - 1)) {
f[i][j] = f[i][j] || f[i - 1][j];
}
}
else {
if (matches(s, p, i, j)) {
f[i][j] = f[i - 1][j - 1];
}
}
}
}
return f[m][n];
}
public boolean matches(String s, String p, int i, int j) {
if (i == 0) {
return false;
}
if (p.charAt(j - 1) == '.') {
return true;
}
return s.charAt(i - 1) == p.charAt(j - 1);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.