lintcode 萬用字元匹配 ac程式碼
今天在lintcode看到一道題,看了一下午的答案都沒看懂,深深的挫敗感,先記錄下來,日後在啃
實現支援'.'和'*'的正規表示式匹配。
'.'匹配任意一個字母。
'*'匹配零個或者多個前面的元素。
匹配應該覆蓋整個輸入字串,而不僅僅是一部分。
需要實現的函式是:bool isMatch(const char *s, const char *p)
樣例
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
2017/9/1號更新,今天又看了一遍,看懂了一些,這種做法屬於動態規劃,主線分為當前字母之後的一個字母是*和不是*的兩種情況,並且整體風格是遞迴的向後檢測匹配與否,每一個環節只用考慮當前的情況是否匹配,實在是一個好方法
class Solution {
public:
/**
* @param s: A string
* @param p: A string includes "." and "*"
* @return: A boolean
*/
bool isMatch(const char *s, const char *p) {
// write your code here
if(*p == '\0')
return *s == '\0';
if(*(p+1) != '*'){
if((*p == '.' && *s != '\0') || *p == *s){//*s如果為結束符即使*p為.當前也不匹配
return isMatch(s+1, p+1);
}else{
return false;
}
}else{
while((*p == '.' && *s != '\0') || *p == *s){
if(isMatch(s, p+2))//每個遇到*號都可以先把它跳過匹配後面的
return true;
s++;//match one more *
}
return isMatch(s, p+2); //這是當前兩個字元不相等,尋找*後的字元與s是否相等的情況
}
}
};
相關文章
- Python3 - 用Shell萬用字元匹配字串Python字元字串
- OpenJudge 帶萬用字元的字串匹配字元字串匹配
- LeetCode 44 萬用字元匹配LeetCode字元
- 匹配純小寫英文字元正則程式碼字元
- 匹配雙位元組字元的正規表示式程式碼字元
- AC 自動機——多模式串匹配模式
- 匹配雙位元組字元的正規表示式程式碼例項字元
- 正規表示式匹配轉義字元反斜槓程式碼例項字元
- LeetCode刷題記126-44. 萬用字元匹配LeetCode字元
- 如何理解掩碼、反掩碼、萬用字元字元
- 面試常遇到的萬用字元匹配的兩個小問題總結面試字元
- LintCode 1905. 字元刪除 Java字元Java
- AC-DMIS測量程式應用舉例
- AC自動機+trie樹實現高效多模式匹配字典模式
- 順序結構儲存串實現串萬用字元匹配的演算法字元演算法
- 匹配空白字元正規表示式字元
- php正則匹配所有違規字元PHP字元
- 正則匹配指定字元之前的字串字元字串
- [MYSQL-8]用萬用字元進行過濾MySql字元
- 匹配空行正規表示式程式碼
- jQuery匹配具有指定字元的選擇器jQuery字元
- 正規表示式匹配雙位元組字元字元
- 萬用字元詳解字元
- Linux萬用字元Linux字元
- Linux 萬用字元Linux字元
- LintCode 解碼方法
- 正規表示式匹配以指定字元開頭和結尾的字元字元
- 匹配商品條形碼正規表示式程式碼
- 匹配A股程式碼的正規表示式
- jQuery利用name匹配元素程式碼例項jQuery
- Linux shell程式設計常用萬用字元有哪些?Linux程式設計字元
- 匹配純英文字元正規表示式字元
- 【python技巧】文字處理-re庫字元匹配Python字元
- 匹配雙位元組字元的正規表示式字元
- jquery匹配具有指定字元的選擇器功能jQuery字元
- Excel 2010 SQL應用032 字元範圍的模糊匹配查詢ExcelSQL字元
- Ubuntu萬用字元的使用Ubuntu字元
- 命令列萬用字元教程命令列字元