LeetCode刷題筆記 十)正規表示式匹配

2021-08-19 22:01:57 字數 1546 閱讀 3466

給定乙個字串 (s) 和乙個字元模式 (p)。實現支援'.''*'的正規表示式匹配。

'.' 匹配任意單個字元。

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

匹配應該覆蓋整個字串 (s) ,而不是部分字串。

說明:示例 1:

輸入:

s = "aa"

p = "a"

輸出: false

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

示例 2:

輸入:

s = "aa"

p = "a*"

輸出: true

解釋: '*' 代表可匹配零個或多個前面的元素, 即可以匹配 'a' 。因此, 重複 'a' 一次, 字串可變為 "aa"。

示例 3:

輸入:

s = "ab"

p = ".*"

輸出: true

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

示例 4:

輸入:

s = "aab"

p = "c*a*b"

輸出: true

解釋: 'c' 可以不被重複, 'a' 可以被重複一次。因此可以匹配字串 "aab"。

示例 5:

輸入:

s = "mississippi"

p = "mis*is*p*."

輸出: false

解法1:

class solution 

// if p1 is *, * means 0 ~ n

int i = 0;

boolean ret = ismatch(s.substring(0), p.substring(2)); // try 0

if (ret) return ret;

while (i < slen && match(getchar(s, i), p0))

}return false;

}private boolean match(char a, char b)

private char getchar(string s, int p)

return 0; //超過索引就返回0

}}

這種演算法是遞迴呼叫方法,其中要注意的點有:獲取字串的第n個字元的時候超出範圍返回0,這樣子就不會出現遺漏;

時間複雜度:o(m*n);

空間複雜度:o(m*n)

解法2:

class solution 

i--;

}// 如果不是*

else

match[s.length()] = false;}}

return match[0];

}}

這是在網上找到的另外一直演算法,看得不是很理解

時間複雜度:o(m*n);

空間複雜度:o(m*n)

Rrui的Leetcode刷題筆記(十)

482.license key formatting class solution if s.back s.erase s.begin s.size 1 reverse s.begin s.end return s 注 題目較簡單,從後到前遍歷一遍後再翻轉即可,時間複雜度o n 空間複雜度o n 超...

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...