Wildcard Matching 萬用字元

2021-08-27 22:39:19 字數 1389 閱讀 6510

implement wildcard pattern matching with support for '?' and '*'.

'?' matches any single character.

'*' matches any sequence of characters (including the empty sequence).

the matching should cover the entire input string (not partial).

the function prototype should be:

bool ismatch(const char *s, const char *p)

some examples:

ismatch("aa","a") → false

ismatch("aa","aa") → true

ismatch("aaa","aa") → false

ismatch("aa", "*") → true

ismatch("aa", "a*") → true

ismatch("ab", "?*") → true

ismatch("aab", "c*a*b") → false

這道題目屬於動態規劃的題目。題目很實際,就是linux系統下萬用字元的匹配問題,'?'只能代表乙個字元,'*'可以代表任意長度字元,包括空字元。兩個字串匹配,屬於二維的dp,用乙個dp來記錄結果。首先我們初始化陣列,當s為空時,我們從p的第乙個字元開始,如果為』*『, 當前狀態就為true, 如果不為』*『,則當前狀態為false,並且後面的都為false,因為s為空,後面只要有乙個字元,就為false;當s不為空,p為空時,這是全為false。接下來我們要找到遞推式,當p中的字元為'*'時,它可以代表多個字元也可以代表空字元,當代表空字元時,dp[i][j] = dp[i][j - 1]; 當代表多個字元時 dp[i][j] = dp[i - 1][j]。因此當p的字元為'*'時 dp[i][j] = dp[i][j - 1] || dp[i - 1][j]。當p的字元不為'*'時,我們首先要比較當前兩個字元是否相等 ,相等的情況有兩種,乙個是p的字元為'?', 或者兩個是相同的字元;其次我們還要考慮上乙個狀態,這時的動態轉移方程為

dp[i][j] = dp[i - 1][j - 1] && (p.charat(j - 1) == '?' || p.charat(j - 1) == s.charat(i - 1))。有了遞推式,**就寫出來了。

public class solution

for(int i = 1; i <= m; i++)

for(int j = 1; j <= n; j++) else

}return dp[m][n];}}

Linux find grep 正則 通配

grep find在指定目錄下查詢檔案。匹配檔名 amin 查詢 在指定時被 訪問過的檔案或目錄 分鐘 cmin,mmin atime 查詢在指定時間訪問過的檔案或目錄 天 ctime,mtime expty 尋找檔案大小為0 byte的檔案,或目錄下沒有任何子目錄或檔案的空目錄 name 按照檔名...

Wildcard Matching 萬用字元匹配

題目要求 implement wildcard pattern matching with support for and matches any single character.matches any sequence of characters including the empty sequ...

python中的通配

通配是指一些特殊的字元,如?和 可以用他們匹配許多名稱類似的檔案,例如使用p 可以匹配所有以p開頭的檔案,使用 txt可以匹配所有以.txt結尾的檔案。使用python中的glob函式可以實現通配 import glob print glob.glob f test python txt 可以匹配所...