leetcode演算法 10 正規表示式匹配

2021-10-04 20:06:33 字數 1617 閱讀 2585

題目

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 '.' 和 '*' 的正規表示式匹配。

'.' 匹配任意單個字元

'*' 匹配零個或多個前面的那乙個元素

所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。

說明:s 可能為空,且只包含從 a-z 的小寫字母。

p 可能為空,且只包含從 a-z 的小寫字母,以及字元 . 和 *。

示例 1

:輸入:

s ="aa"

p ="a"

輸出:false

解釋:"a" 無法匹配 "aa" 整個字串。

示例 2

:輸入:

s ="aa"

p ="a*"

輸出:true

解釋: 因為 '*' 代表可以匹配零個或多個前面的那乙個元素, 在這裡前面的元素就是 'a'。因此,字串 "aa" 可被視為 'a' 重複了一次。

示例 3

:輸入:

s ="ab"

p =".*"

輸出:true

解釋:".*" 表示可匹配零個或多個('*')任意字元('.')。

示例 4

:輸入:

s ="aab"

p ="c*a*b"

輸出:true

解釋: 因為 '*' 表示零個或多個,這裡 'c' 為 0 個,

'a' 被重複一次。因此可以匹配字串 "aab"。

示例 5

:輸入:

s ="mississippi"

p ="mis*is*p*."

輸出:false

方案:考慮 「.」 和 "*"的基本位置
class

solution

elseif(

(!s_empty && p_empty)

)elseif(

(s_empty &&

!p_empty)

)else

if(p.

length()

>

1&& p.

charat(1

)=='*')

}else

else

if(p.

length()

>1)

indexs++;}

return

ismatch

(s.substring

(indexs)

, p.

substring(2

));}

else

if(p.

charat(0

)=='.'&& p.

charat(1

)=='*')

indexs++;}

return

ismatch

(s.substring

(indexs)

, p.

substring(2

));}

}}return

false;}

}

官方題解:
class

solution

else

}}

總結:

演算法筆記 10 雜湊表

雜湊錶用的是陣列支援下標隨機訪問資料的特性,所以雜湊表其實就是陣列的一種擴充套件,由陣列演化而來。通過雜湊函式將元素的鍵值對映為下標,然後將資料儲存在陣列對應下標的位置。我們按照鍵值查詢元素時,我們使用同樣的雜湊函式,將鍵值轉化為陣列下標,從對應的陣列下標位置取資料。雜湊函式計算得到的雜湊值必須是乙...

LeetCode10 正規表示式

給你乙個字串 s 和乙個字元規律 p,請你來實現乙個支援 和 的正規表示式匹配。匹配任意單個字元 匹配零個或多個前面的那乙個元素 所謂匹配,是要涵蓋 整個 字串 s的,而不是部分字串。說明 s 可能為空,且只包含從 a z 的小寫字母。p 可能為空,且只包含從 a z 的小寫字母,以及字元 和 示例...

leetcode初級演算法 鍊錶

題目源自leetcode,方法都是自 cai 己 ji 寫的,可能比較符合菜雞們的思路 鍊錶是做到現在,感覺自己最拉垮的一節,資料結構真的都還給老師了 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點。傳入函式的唯一引數為 要被刪除的節點 示例 1 輸入 head 4,5,1,9 node...