LintCode (192)萬用字元匹配

2021-07-22 08:53:55 字數 910 閱讀 1565

判斷兩個可能包含萬用字元「?」和「*」的字串是否匹配。匹配規則如下:

'?' 可以匹配任何單個字元。

'*' 可以匹配任意字串(包括空字串)。

兩個串完全匹配才算匹配成功。

函式介面如下:

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

您在真實的面試中是否遇到過這個題?

樣例一些例子:

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

採用動態規劃解決,t(n)=o(mn)

class solution //for

}//for

dp[0][0] = 1;

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

else//else

}//for

for(int j=1; j<=plen; ++j)

else//else

}//for

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

else if(s[i-1] == '?' || p[j-1] == '?')else //else

}//for

}//for

return dp[slen][plen];

}};

bzoj3507 Cqoi2014 萬用字元匹配

我們將題目輸入的那個含萬用字元的串,記為 萬用字元串 下面的檔名記為 檔名 檔名 數量很少可以依次查詢。我們先將 萬用字元串 以 為界,將 萬用字元串 分解,得到若干子串,記為 通配子串 我們將每個 通配子串 各建立乙個 ac自動機。而有的 通配子串 可能含 萬用字元,我們將再次按 為界,分解這個 ...

BZOJ3507 Cqoi2014 萬用字元匹配

必須要記住字串很好卡一不小心就o n 別問我為什麼這麼說.qaq 這題首先滿足位數與字母兩個限制,那麼我們 分大塊?分小塊,求各塊hash值,同時預處理出來每個字串的字首hash這樣就可以o 1 對比了 千萬不要忘記hash字串對比的功能,我在考試的時候一腦抽就忘了.include include ...

bzoj3570 Cqoi2014 萬用字元匹配

題目鏈結 給出乙個主串,裡面有些萬用字元,可以代替任意字串或者消失,可以且僅可以代替乙個字元。問能否用這個串匹配一些詢問串。也許我zz了,半天寫不出 f i j 表示主串到第 i 個匹配符,詢問串到第 j 個字元能否被匹配。轉移很簡單,hash一下就好了。在主串末尾新增乙個 bzoj3507 inc...