判斷兩個可能包含萬用字元「?」和「*」的字串是否匹配。匹配規則如下:
'?' 可以匹配任何單個字元。'*' 可以匹配任意字串(包括空字串)。
兩個串完全匹配才算匹配成功。
函式介面如下:
bool ismatch(const char *s, const char *p)
您在真實的面試中是否遇到過這個題?
樣例一些例子:
ismatch("aa","a") → falseismatch("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...