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