正規表示式匹配
給你乙個字串s
和乙個字元規律p
,請你來實現乙個支援'.'
和'*'
的正規表示式匹配。
'.' 匹配任意單個字元說明:'*' 匹配零個或多個前面的那乙個元素
所謂匹配,是要涵蓋 **整個 **字串
s
的,而不是部分字串。
示例 1:
輸入:示例 2:s =
"aa"
p =
"a"
輸出:false解釋:"a" 無法匹配 "aa" 整個字串。
輸入:示例 3:s =
"aa"
p =
"a*"
輸出:true解釋:因為 '*' 代表可以匹配零個或多個前面的那乙個元素, 在這裡前面的元素就是 'a'。因此,字串 "aa" 可被視為 'a' 重複了一次
輸入:示例 4:s =
"ab"
p =
".*"
輸出:true解釋:"." 表示可匹配零個或多個('')任意字元('.')
輸入:示例 5:s =
"aab"
p =
"c*a*b"
輸出:true解釋:因為 '*' 表示零個或多個,這裡 'c' 為 0 個, 'a' 被重複一次。因此可以匹配字串 "aab"
輸入:方法一:回溯s =
"mississippi"
p =
"mis*is*p*."
輸出:false
public boolean ismatch(string s, string p)
boolean firstmatch = !s.isempty() && (s.charat(0) == p.charat(0) || p.charat(0) == '.');
if (1 < p.length() && p.charat(1) == '*') else
}
方法二:備忘錄法(避免重複計算)
dp[i][j]表示s[i:],p[j:]能否匹配
時間複雜度o(tp) 用 t 和 p 分別表示匹配串和模式串的長度
public boolean ismatch(string s, string p)
public boolean helper(string s,string p,int dp,int i,int j)
if(dp[i][j]!=0)
boolean firstmatch = !s.isempty() && (s.charat(0) == p.charat(0) || p.charat(0) == '.');
boolean ans;
if (1 < p.length() && p.charat(1) == '*') else
if(ans) else
return ans;
}
方法三:動態規劃(自底向上)
public boolean ismatch(string s, string p) else }}
return dp[0][0];
}
第二次做
遞迴
public boolean ismatch(string s, string p)
public boolean ismatch(string s, string p, int i, int j)
boolean firstmatch = i < s.length() && (s.charat(i) == p.charat(j) || p.charat(j) == '.');
if (j + 1 < p.length() && p.charat(j + 1) == '*')
return firstmatch && ismatch(s, p, i + 1, j + 1);
}
備忘錄
public boolean ismatch(string s, string p)
public boolean ismatch(string s, string p, int i, int j, int dp)
if (dp[i][j] != 0)
boolean firstmatch = i < s.length() && (s.charat(i) == p.charat(j) || p.charat(j) == '.');
boolean ismatch;
if (j + 1 < p.length() && p.charat(j + 1) == '*') else
dp[i][j] = ismatch ? 1 : -1;
return ismatch;
}
動態規劃
注意初始值:
public boolean ismatch(string s, string p)
}for (int i = 0; i < len1; i++) else if (c2 == '*') else }}
}return dp[len1][len2];
}
正規表示式 匹配
字串 void abtr quint32 ab 表示乙個正規表示式 template class bidirectionaliterator class allocator std allocator sub match bidirectionaliterator class match resul...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 解法 首先要想到用遞迴處理...
正規表示式匹配
請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 包含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配 class solutio...