日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

道指mt4代码_剑指offer算法题052:正则表达式匹配

發(fā)布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 道指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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。