劍指offer(52)正規表示式匹配

2021-09-20 13:07:08 字數 941 閱讀 5722

問題描述:請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配。

思路:首先判斷兩個字串是否合法,pattern字串中不能以'*'為開頭,任意兩『*』不能相鄰。

遞迴判斷是否匹配,process函式的意義是,從str的si位置開始,一直到str結束位置的子串,及str[si, slen],是否能被從pattern的ei位置開始的到結束位置的子串匹配,所以process(s,e,0,0)就是最終的返回結果。

**:

public class solution 

return isvalid(str , pattern) ? process(str, pattern, 0, 0) : false;

}public boolean process(char s, char e, int si, int ei)

//ei不是最後位置,且ei的下乙個位置不是'*'

if(ei + 1 == e.length || e[ei + 1] != '*')

//ei下乙個位置為'*',判斷s[si]與e[ei]是否匹配

while(si != s.length && (e[ei] == s[si] || e[ei] == '.'))

si++;

}return process(s, e, si, ei + 2);

}//判斷兩字串是否合法

public boolean isvalid(char str, char pattern)

}for(int i = 0; i < pattern.length; i++)

}return true;

}}

劍指offer 52 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 本題的主要思路如下 首先判...

劍指offer52 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 abaca 匹配,但是與 aa.a 和 ab a 均不匹配 參考leetcode10.正規...

劍指offer 52 正規表示式匹配

請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 分類討論各種情況 1 特殊...