日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 44 字符匹配

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 44 字符匹配 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題意:s是空串或包含a-z字母;

p為包含a-z字母或?或 * (其中*可以匹配任意字符串包括空串,?可以匹配任意字符)。

思路:

1)特殊情況:當(dāng)s為空串時(shí),p為連續(xù) * 時(shí),則連續(xù) * 的位置都為true。

2)若p的第j個(gè)字符為 * ,分兩種情況:

a)? 若p中的前 j-1個(gè)字符和 s 中的前 i 個(gè)字符匹配成功了, 即 dp[i][j-1] == true , 因?yàn)?* 可以匹配空串,則 dp[i][j] == true;

b)? 若p中的前 j 個(gè)字符和 s 中前 i-1 個(gè)字符匹配成功了,即 dp[i-1][j] == true , 因?yàn)?* 可以匹配任意字符串,則 dp[i][j] == true.

3) ? 若p中的第j個(gè)字符不是 * 時(shí),則需要滿足 dp[i-1][j-1] == true 和 s 中的第i個(gè)字符和p中的第j個(gè)字符相等, 即 s[i-1] == p[j-1], 或者 p中的第j個(gè)字符是問(wèn)號(hào), 即 p[j-1] == '?' 則 dp[i][j] == true.

注意:dp[][] 初始化申請(qǐng)空間大小要為 (m+1, n+1) ,因?yàn)閐p[0][0] 為p和s為空串時(shí)候的情況。

dp如果用二維數(shù)組定義會(huì)超時(shí)!所以用二維vector。

注:s[i-1] 代表s中第i位字符。

class Solution { public:bool isMatch(string s, string p) {int m = s.size();int n = p.size();//dp[i][j]:s中前i個(gè)字符組成的子串和p中前j個(gè)字符組成的子串是否能匹配//bool dp[m+1][n+1] = {false};vector<vector<bool> > dp(m+1, vector<bool>(n+1, false));//s,p都為空,返回0dp[0][0] = true;//s為空, p為連續(xù)星號(hào)時(shí),賦值為truefor(int i = 1; i <= n; i++){if(p[i-1] == '*') dp[0][i] = dp[0][i-1];}for(int i=1; i<=m; i++){for(int j=1; j<=n; j++){if(p[j-1] == '*')dp[i][j] = dp[i-1][j] || dp[i][j-1];elsedp[i][j] = (s[i-1]==p[j-1] || p[j-1] == '?') && dp[i-1][j-1];}}return dp[m][n];} };

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/Bella2017/p/10644299.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的leetcode 44 字符匹配的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。