Leetcode \ # 10 정규 표현 식 일치 문제 풀이 소절
4768 단어 정규 표현 식
원제
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).
The function prototype should be: bool isMatch(const char *s, const char *p)
Some examples: isMatch(“aa”,”a”) → false isMatch(“aa”,”aa”) → true isMatch(“aaa”,”aa”) → false isMatch(“aa”, “a*”) → true isMatch(“aa”, “.*”) → true isMatch(“ab”, “.*”) → true isMatch(“aab”, “c*a*b”) → true
2 문제 이해
정규 표현 식 을 지정 하고 문자열 과 일치 하 는 지 여 부 를 판단 하 는 것 은 간단 합 니 다.
문제 풀이 방식: 재 귀적 으로 만 났 습 니 다. * 가 없 는 것 과 직접 만 났 습 니 다 *. 매번 건 너 뛰 고 일치 하 는 두 가지 로 나 누 었 습 니 다.
상세 하 게 제 코드 설명 을 보 세 요.
3 AC 분해
/** * * , , : * 1、 * , * ,1 * * a、* (. ), , , * , b * b、 *, , * 2、 * * a、 , * b、 gameover * 3、 , , true * 4、 , , : * a、 pattern * , * , * b、 , p , , * */
public class Solution {
char[] subject;
char[] pattern;
int slen,plen;
public boolean check(int si,int pi){
if(si==slen && pi==plen) // 3
return true;
if(si<slen && pi<plen){
if(pi<plen-1 && pattern[pi+1]=='*'){
boolean same=false;
if(pattern[pi]=='.' || pattern[pi]==subject[si])
same=true;
boolean flag=false;
if(same)
flag=check(si+1,pi); // 1.a
if(flag==false)
flag=check(si,pi+2); // 1.b
return flag;
} else{
if(pattern[pi]=='.' || pattern[pi]==subject[si])
return check(si+1,pi+1);// 2.a
return false; // 2.b
}
}
else{
while (pi<plen-1 && pattern[pi+1]=='*'){ // 4
pi+=2;
}
if(si==slen && pi==plen) // 4.a 4.2b pattern
return true;
return false;// 4.a 4.2b pattern
}
}
public boolean isMatch(String s, String p) {
slen=s.length();
plen=p.length();
subject=s.toCharArray();
pattern=p.toCharArray();
return check(0,0);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
awk 상용 명령awk 는 모든 입력 줄 을 하나의 기록 으로 인식 하고 그 줄 의 모든 단어 도 메 인 을 하나의 필드 로 인식 합 니 다. ARGC 명령 줄 에 awk 스 크 립 트 가 들 어 오 는 매개...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.