問題描述:請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含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 特殊...