道指mt4代码_剑指offer算法题052:正则表达式匹配
生活随笔
收集整理的這篇文章主要介紹了
道指mt4代码_剑指offer算法题052:正则表达式匹配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小編在求職找找工作期間劍指offer上的算法題刷了很多遍,并且每道題小編當時都總結了一種最適合面試時手撕算法的最優解法。考慮到劍指offer算法題在面試中的高頻出現,小編每天和大家分享一道劍指offer上的算法題,以及小編總結的答案。下面是第052是道劍指offer算法題:
題目描述
請實現一個函數用來匹配包括'.'和'*'的正則表達式。模式中的字符'.'表示任意一個字符,而'*'表示它前面的字符可以出現任意次(包含0次)。在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配分析:題解在注釋中,相對之前的題目,這道題難度更大些。
/* 解這題需要把題意仔細研究清楚,反正我試了好多次才明白的。 首先,考慮特殊情況: 1>兩個字符串都為空,返回true 2>當第一個字符串不空,而第二個字符串空了,返回false(因為這樣,就無法 匹配成功了,而如果第一個字符串空了,第二個字符串非空,還是可能匹配成 功的,比如第二個字符串是“a*a*a*a*”,由于‘*’之前的元素可以出現0次, 所以有可能匹配成功) 之后就開始匹配第一個字符,這里有兩種可能:匹配成功或匹配失敗。但考慮到pattern 下一個字符可能是‘*’, 這里我們分兩種情況討論:pattern下一個字符為‘*’或 不為‘*’: 1>pattern下一個字符不為‘*’:這種情況比較簡單,直接匹配當前字符。如果 匹配成功,繼續匹配下一個;如果匹配失敗,直接返回false。注意這里的 “匹配成功”,除了兩個字符相同的情況外,還有一種情況,就是pattern的 當前字符為‘.’,同時str的當前字符不為‘\0’。 2>pattern下一個字符為‘*’時,稍微復雜一些,因為‘*’可以代表0個或多個。 這里把這些情況都考慮到: a>當‘*’匹配0個字符時,str當前字符不變,pattern當前字符后移兩位, 跳過這個‘*’符號; b>當‘*’匹配1個或多個時,str當前字符移向下一個,pattern當前字符 不變。(這里匹配1個或多個可以看成一種情況,因為:當匹配一個時, 由于str移到了下一個字符,而pattern字符不變,就回到了上邊的情況a; 當匹配多于一個字符時,相當于從str的下一個字符繼續開始匹配) 之后再寫代碼就很簡單了。*/class Solution {public: bool match(char* str, char* pattern){ if (*str == '\0' && *pattern == '\0') return true; if (*str != '\0' && *pattern == '\0') return false; //if the next character in pattern is not '*' if (*(pattern+1) != '*') { if (*str == *pattern || (*str != '\0' && *pattern == '.')) return match(str+1, pattern+1); else return false; } //if the next character is '*' else { if (*str == *pattern || (*str != '\0' && *pattern == '.')) return match(str, pattern+2) || match(str+1, pattern); else return match(str, pattern+2); } }};猜你還想看
一個程序員寫多門語言,寫代碼時會記串么?計算機專業學生,最應該學習的課程前五位是什么?長按,掃碼,關注
及時收看更多精彩內容
博主:今日頭條大數據工程師專注:求職 面經 源碼 java 大數據技術分享點擊”閱讀原文“:領取5T精品資料,面試總結、100+實戰項目
我知道你 “在看”
總結
以上是生活随笔為你收集整理的道指mt4代码_剑指offer算法题052:正则表达式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何快速调整图片亮度和对比度图片对比度亮
- 下一篇: 2020年日历电子版(打印版)_“温故知