劍指Offer-正則表達式匹配(Python)

1 題干內容

請實現一個函數用來匹配包括.和*的正則表達式。模式中的字符.表示任意一個字符,而*表示它前面的字符可以出現任意次(包含0次)。
在本題中,匹配是指字符串的所有字符匹配整個模式。
例如,字符串aaa與模式a.a和ab*ac*a匹配,但是與aa.a和ab*a均不匹配。



2 題意解析

"匹配"是指完全匹配,即aaa與aaaa不匹配,只有aaa與aaa才能說是匹配。
b*可以理解是''"也可以是"bbbbbb*",例如ab*ac*a可以理解為"aaa",也可以理解為"abaa"或者"abaca"。



3 解題思路

字符串:strA, 模式串patternB
(1)patternB[j+1] != '*'
當strA[i] == patternB[j]或者patternB[j] == '.' and i < len(strA)
    如果strA[i+1] != patternB[j+1], 返回False
    如果strA[i+1] == patternB[j+1],進行下一輪比較
當strA[i] != patternB[j] and patternB[j] != '.'  直接返回Flase (2)patternB[j+1] == '*' 當strA[i] == patternB[j]或者patternB[j] == '.' and i < len(strA) 1)i不變,模式串 j = j + 2 2)j不變,字符串 i = i + 1 3)i = i+ 1, j = j + 2 當strA[i] != patternB[j] and patternB[j] != '.' 1)i不變,模式串 j = j + 2



4 具體代碼

def matchReg(strA: str, patternB: str, i: int = 0, j: int = 0) -> bool:if i == len(strA) and j == len(patternB):   # 完全匹配return Trueif i < len(strA) and j == len(patternB) or (i == len(strA) and j < len(patternB)):return Falseif (j+1) < len(patternB) and patternB[j+1] == '*':if (patternB[j] == '.' and i < len(strA)) or (strA[i] == patternB[j]):return matchReg(strA, patternB, i, j + 2) or matchReg(strA, patternB, i + 1, j) or matchReg(strA, patternB, i + 1, j + 2)else:return matchReg(strA, patternB, i, j + 2)if (patternB[j] == '.' and i < len(strA)) or (strA[i] == patternB[j]):return matchReg(strA, patternB, i + 1, j + 1)return False

?

?

GitHub鏈接:https://github.com/miaomiaoqiushui/Algorithm/blob/master/1_%E5%89%91%E6%8C%87Offer/53_%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D.ipynb

?

轉載于:https://www.cnblogs.com/liuzhen1995/p/10799234.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Docker 制作鏡像的方式

其它制作鏡像的方式 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 除了標準的使用 Dockerfile 生成鏡像的方法外&#xff0c;由于各種特殊需求和歷史原因&#xff0c;還提供了一些其它…

【算法】快排

快速排序 其利用的思想就是分治思想&#xff0c;最開始先從數組中隨機選擇一個元素p&#xff08;為什么隨機下面解釋&#xff09;&#xff0c;然后以這個元素對數組中的元素進行分類&#xff0c;數組左側都是小于p的元素&#xff0c; 右側都是大于等于p的元素。這樣就讓數組分成…

【C基礎】堆內存創建/釋放和內存清理函數/內存泄漏

本期涉及到了較多的指針&#xff0c;沒有徹底領悟的同學請翻閱之前的博文~ 一閃一閃亮晶晶&#xff0c;滿天都是小星星*** 什么是堆內存&#xff1a; 是進程的一個內存段(text、data、bss、heap、stack)之一&#xff0c;由程序員手動管理&#xff0c; 特點就是足夠大&#x…

19_05_01校內訓練[polygon]

題意 把一個邊長為1的正n邊形放到一個正m邊形中&#xff0c;要求m邊形完全覆蓋n邊形&#xff0c;可以有交點&#xff0c;并且中心重合。求正m邊形的最小邊長&#xff0c;至少精確到6位。要求logn計算。 思考 先考慮m|n的情況。 我們知道&#xff0c;正m邊形的邊長與可行區域&am…

六度人脈 全球最高效的人脈法則(圖)

六度人脈這一概念&#xff0c;在20世紀60年代由美國心理學家Stanley Milgram提出并驗證。 所謂六度人脈&#xff0c;即地球上所有的人都可以通過六層以內的熟人關系鏈和其他人聯系起來。 通俗地說&#xff1a;“最多通過六個人你就可以認識地球上任何一個陌生人。” SNS(社會…

[轉]numpy中的np.max 與 np.maximum區別

轉自&#xff1a;https://blog.csdn.net/lanchunhui/article/details/52700895 轉載于:https://www.cnblogs.com/xianhan/p/10609319.html

JVM 的 Finalization Delay 引起的 OOM(java.lang.OutOfMemoryError:null at sun.misc.Unsafe.allocateMemory.)

今天在壓力測試環境某一個服務出現crash了&#xff0c;經過一番檢查&#xff0c;終于發現是由于JVM的Finalization Delay引起的&#xff0c;這個問題比較特殊&#xff0c;這里記錄一下。 這個服務是用Java寫的&#xff0c;主要完成的功能是根據特定的指令文件生成mp4文件&#…

win10 php7+apache2.4的配置以及遇到的問題及解決

首先進入PHP官網下載php7的版本,我下的是PHP7.1.28,在PHP的下載頁面注意劃紅線和綠線的地方(我畫的) 1.畫了紅線的意思是請使用由apache lounge提供的編譯文件,也就是點進藍色Apache lounge這里下載. 2.畫了綠色的線的意思是用Apache的話你必須使用Thread Safe(線程安全)的PHP…

緩存區的輸入輸出,字符串常用操作,實現strlen/strcpy/strcat/strcmp函數)

輸出緩沖區&#xff1a; 程序輸入的數據并不能立即顯示在屏幕上&#xff0c;而是先存儲在輸出緩沖區中&#xff0c;滿足一些條件后才顯示出來。 1、遇到\n后 2、遇到輸入語句 3、當輸出緩沖區滿4K 4、當程序結束 5、手動刷新 fflush(stdout) 緩沖區機制可以提高數據的讀寫速度…

理性分散投資 收益袋袋平安

理財錦囊 想要投資理財&#xff0c;不光可以選擇股票和債券這類入門產品&#xff0c; 實際上&#xff0c;還可選擇其他低風險及高回報的投資產品&#xff0c;例如外匯、期貨和商品。 針對此&#xff0c;幾位分析師預測了2014年各國經濟走勢的重點&#xff0c;協助散戶們分配…

AI一周熱聞:華為豪擲3.3億劍橋買地,自建光芯片工廠;比特大陸IPO失敗,組織架構調整...

導讀 華為豪擲3.3億劍橋買地&#xff0c;自建光芯片工廠蘋果春季發布會無硬件發布&#xff0c;轉型之心迫切比特大陸IPO失敗&#xff0c;組織架構調整&#xff0c;王海超任CEO特斯拉起訴小鵬汽車員工竊取商業機密英偉達發布GauGAN&#xff0c;線條色塊秒變逼真圖像用機器學習防…

Docker 環境:Nexus3.x 的私有倉庫

Nexus3.x 的私有倉庫 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 使用 Docker 官方的 Registry 創建的倉庫面臨一些維護問題。比如某些鏡像刪除以后空間默認是不會回收的&#xff…

虛擬環境vitualenv的使用

Python3開發之虛擬環境virtualenv與virtualenvwrapper 在使用 Python 開發的過程中&#xff0c;工程一多&#xff0c;難免會碰到不同的工程依賴不同版本的庫的問題&#xff1b; 亦或者是在開發過程中不想讓物理環境里充斥各種各樣的庫&#xff0c;引發未來的依賴災難。 此時&am…

find_first_of和find函數的區別

小記&#xff1a; find_first_of函數最容易出錯的地方是和find函數搞混。它最大的區別就是如果在一個字符串str1中查找另一個字符串str2&#xff0c;如果str1中含有str2中的任何字符&#xff0c;則就會查找成功&#xff0c;而find則不同&#xff1b;

銀行各類理財收益漸漲 各類寶錢景尚不明朗

這個春天&#xff0c;投資似乎進入了一個好事多磨的階段。央行一反先前支持的態度&#xff0c;開始對互聯網理財念起了“緊箍咒”。一時間&#xff0c;各種“寶”的命運變得撲朔迷離起來。盡管各種“寶”聲明&#xff1a;不受央行政策影響。而投資者內心的擔憂&#xff0c;恐怕…

Firefox 66回歸!修復多項臭蟲相關問題

上周最新版Firefox 66因為爆出會使微軟Office 365中的PowerPoint文字消失的臭蟲&#xff0c;Mozilla暫停發送。3月27日Mozilla重新釋出修補完成的最新版Firefox 66.0.2。根據Mozilla臭蟲報告網頁&#xff0c;Firefox 66除了造成Office 365中的PowerPoint文字消失的問題外&#…

PHP全棧學習筆記27

數組概述&#xff0c;類型&#xff0c;聲明&#xff0c;遍歷&#xff0c;輸出&#xff0c;獲取數組中最后一個元素&#xff0c;刪除重復數組&#xff0c;獲取數組中指定元素的鍵值&#xff0c;排序&#xff0c;將數組中的元素合成字符串。 數組概述&#xff0c;數組是存儲&…

Docker : 數據卷(創建、掛載、查看、刪除)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 數據卷 數據卷 是一個可供一個或多個容器使用的特殊目錄&#xff0c;它繞過 UFS&#xff0c;可以提供很多有用的特性&#xff1a; 數據卷…

mac地址和ip地址的區別(轉)

先糾正一下幾個比較模糊的概念&#xff1a;“MAC地址表儲存IP地址”&#xff0c; MAC地址表是二層設備中存儲“MAC地址”和“轉發端口”映射關系的表&#xff0c;并不直接存儲IP地址。 “路由器根據MAC地址來選擇路由進行數據發送”&#xff0c;對于三層設備的三層端口來說&…

你是否發現 職業能力危機,請 警惕

身在職場&#xff0c;你有不有遭遇職業能力危機呢 ? 核心競爭力的增長是職業持續性發展的基礎&#xff0c;隨著年齡的增長和工作經驗的積累&#xff0c;有的職場人士保持著良好的發展勢態&#xff0c;有的卻越來越落伍&#xff0c;競爭力越來越弱。只有能力跟得上變化&#x…