請實現乙個函式用來匹配包括'.'
和'*'
的正規表示式。
模式中的字元'.'
表示任意乙個字元,而'*'
表示它前面的字元可以出現任意次(含0次)。
在本題中,匹配是指字串的所有字元匹配整個模式。
例如,字串"aaa"
與模式"a.a"
和"ab*ac*a"
匹配,但是與"aa.a"
和"ab*a"
均不匹配。
樣例
輸入:
s="aa"
p="a*"
輸出:true
思路:
(動態規劃) o(nm)o(nm)
狀態表示:f[i][j]表示p從j開始到結尾,是否能匹配s從i開始到結尾
狀態轉移:
如果p[j+1]不是萬用字元'*',則f[i][j]是真,當且僅當s[i]可以和p[j]匹配,且f[i+1][j+1]是真;
如果p[j+1]是萬用字元'*',則下面的情況只要有一種滿足,f[i][j]就是真;
f[i][j+2]是真;
s[i]可以和p[j]匹配,且f[i+1][j]是真;
本人這樣理解的:當模式中的第二個字元是 「星號」 時:
有以下匹配方式:
dp(x, y + 2, s, p) :模式後移2字元,相當於 x「星號」 被忽略;
dp(x + 1, y, s, p):字串後移1字元,模式不變,即繼續匹配字元下一位,因為 「星號」 可以匹配多位;
很考驗分類討論能力和動態規劃運用能力。
**:class solution
bool dp(int i,int j,string &s,string &p)
};
shell awk正則式匹配問題
今天看到個shell指令碼裡面awk處理字串的,裡面有一句gsub 0 9 2 而這個 2的格式是2013 08 07 00 12 13.333這種,這個gsub想要把.333給去掉,看著不太正常,感覺裡面的正則式應該是匹配不到.333的啊。轉義後就變成了乙個 而原來的.是沒有被轉義的,這樣就應該無...
js 日期匹配正則式
檢驗字串中是否包含1900 2050的日期子字串 var datereg null ymd new regexp 2 9 0 9 1 6 9 0 9 1 0 2 0?1 9 2 0 8 1 0 9 0?1 9 1 0 2 0?13 9 29 30 1 02 0?13578 31 1 6 9 2 9 ...
Python 正則匹配問題
前幾天,在用python正則做乙個匹配關鍵字的事情,發現了一些問題,順便提供一些解決方法。使用的是python re module re.search 與 re.match的區別 re.match 函式 總是從字串 開頭匹配 並返回匹配的字串的 match 物件 re.search 函式 對整個字串...