正則式匹配問題

2021-10-02 13:18:31 字數 980 閱讀 5641

請實現乙個函式用來匹配包括'.''*'的正規表示式。

模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(含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 函式 對整個字串...