[Leedcode][第十题][剑指offer]面试题第[19]题[正则表达式][动态规划][递归][JAVA]
生活随笔
收集整理的這篇文章主要介紹了
[Leedcode][第十题][剑指offer]面试题第[19]题[正则表达式][动态规划][递归][JAVA]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[困難]
請實現一個函數用來匹配包含'. '和'*'的正則表達式。模式中的字符'.'表示任意一個字符,而'*'表示它前面的字符可以出現任意次(含0次)。在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串"aaa"與模式"a.a"和"ab*ac*a"匹配,但與"aa.a"和"ab*a"均不匹配。示例 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 s 可能為空,且只包含從 a-z 的小寫字母。 p 可能為空,且只包含從 a-z 的小寫字母以及字符 . 和 *,無連續的 '*'。【解答思路】
1. 動態規劃
時間復雜度:O(N^2) 空間復雜度:O(1)
思路二:
2. 遞歸
時間復雜度:O(N) 空間復雜度:O(1)
class Solution {public boolean isMatch(String A, String B) {// 如果字符串長度為0,需要檢測下正則串if (A.length() == 0) {// 如果正則串長度為奇數,必定不匹配,比如 "."、"ab*",必須是 a*b*這種形式,*在奇數位上if (B.length() % 2 != 0) return false;int i = 1;while (i < B.length()) {if (B.charAt(i) != '*') return false;i += 2;}return true;}// 如果字符串長度不為0,但是正則串沒了,return falseif (B.length() == 0) return false;// c1 和 c2 分別是兩個串的當前位,c3是正則串當前位的后一位,如果存在的話,就更新一下char c1 = A.charAt(0), c2 = B.charAt(0), c3 = 'a';if (B.length() > 1) {c3 = B.charAt(1);}// 和dp一樣,后一位分為是 '*' 和不是 '*' 兩種情況if (c3 != '*') {// 如果該位字符一樣,或是正則串該位是 '.',也就是能匹配任意字符,就可以往后走if (c1 == c2 || c2 == '.') {return isMatch(A.substring(1), B.substring(1));} else {// 否則不匹配return false;}} else {// 如果該位字符一樣,或是正則串該位是 '.',和dp一樣,有看和不看兩種情況if (c1 == c2 || c2 == '.') {return isMatch(A.substring(1), B) || isMatch(A, B.substring(2));} else {// 不一樣,那么正則串這兩位就廢了,直接往后走return isMatch(A, B.substring(2));}}} }【總結】
1.總想著正向解決問題,非但沒有考慮清楚情況,而且不全面,沒有發現子問題立即轉化為遞歸或動態規劃的思想
2.歸納整理總結 考慮清楚所有情況
3.動態規劃流程
第 1 步:設計狀態
第 2 步:狀態轉移方程
第 3 步:考慮初始化
第 4 步:考慮輸出
第 5 步:考慮是否可以狀態壓縮
轉載鏈接:https://leetcode-cn.com/problems/zheng-ze-biao-da-shi-pi-pei-lcof/solution/zhu-xing-xiang-xi-jiang-jie-you-qian-ru-shen-by-je/
參考鏈接:https://leetcode-cn.com/problems/regular-expression-matching/solution/zheng-ze-biao-da-shi-pi-pei-by-leetcode-solution/
總結
以上是生活随笔為你收集整理的[Leedcode][第十题][剑指offer]面试题第[19]题[正则表达式][动态规划][递归][JAVA]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu环境下读取罗技G29方向盘信
- 下一篇: bootstrap-表单控件——单选按钮