給定乙個字串 (s
) 和乙個字元模式 (p
)。實現支援'.'
和'*'
的正規表示式匹配。
'.' 匹配任意單個字元。匹配應該覆蓋整個字串 ('*' 匹配零個或多個前面的元素。
s
) ,而不是部分字串。
說明:示例 1:
輸入:示例 2:s = "aa"
p = "a"
輸出: false
解釋: "a" 無法匹配 "aa" 整個字串。
輸入:示例 3:s = "aa"
p = "a*"
輸出: true
解釋: '*' 代表可匹配零個或多個前面的元素, 即可以匹配 'a' 。因此, 重複 'a' 一次, 字串可變為 "aa"。
輸入:示例 4:s = "ab"
p = ".*"
輸出: true
解釋: ".*" 表示可匹配零個或多個('*')任意字元('.')。
輸入:示例 5:s = "aab"
p = "c*a*b"
輸出: true
解釋: 'c' 可以不被重複, 'a' 可以被重複一次。因此可以匹配字串 "aab"。
輸入:解法1:s = "mississippi"
p = "mis*is*p*."
輸出: false
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...