劍指offer 面試19題

2022-04-23 00:51:10 字數 1332 閱讀 9310

面試19題:

題目:正規表示式匹配

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

解題思路:需要仔細考慮各種可能的情況,具體參見**注釋。

解題**:

#

-*- coding:utf-8 -*-

class

solution:

#s, pattern都是字串

defmatch(self, s, pattern):

#write code here

if len(s)==0 and len(pattern)==0:

return

true

if len(s)>0 and len(pattern)==0:

return

false

#當模式中的第二個字元是"*"時

if len(pattern)>1 and pattern[1]=="*"

:

#如果字串第乙個模式跟模式第乙個字元匹配(相等或匹配到"."),可以有3種匹配方式:

if len(s)>0 and (s[0]==pattern[0] or pattern[0]=='.'

):

#1、模式後移2字元,相當於x*被忽略

#2、字串後移1字元,模式後移兩字元;

#3、字串後移1字元,模式不變,即繼續匹配字元下一位,因為*可以匹配多位

return self.match(s, pattern[2:]) or self.match(s[1:],pattern[2:]) or self.match(s[1:],pattern)

else

:

return self.match(s,pattern[2:])

#當模式中的第二個字元不是"*"時:

#1、如果字串第乙個字元和模式中的第乙個字元匹配(相等或匹配到"."),那麼字串和模式都後移乙個字元,然後匹配剩餘的

if len(s) > 0 and (s[0] == pattern[0] or pattern[0] == '.'

):

return self.match(s[1:],pattern[1:])

#2、如果字串第乙個字元和模擬中的第乙個字元相不匹配,直接返回false

return false

劍指offer 面試35題

面試35題 題目 複雜鍊錶的複製 題 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解題思路一 python作弊法 解題 coding ...

劍指offer 面試33題

面試33題 題 二叉搜尋樹的後序遍歷序列 題目 輸入乙個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出yes,否則輸出no。假設輸入的陣列的任意兩個數字都互不相同。解題思路 遞迴 解題 coding utf 8 class solution defverifysquenceof...

劍指offer 面試31題

面試31題 題目 棧的壓入 彈出元素 題 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出...