題目:
請實現乙個函式用來匹配包括'.'和'*'的正規表示式。模式中的字元'.'表示任意乙個字元,而'*'表示它前面的字元可以出現任意次(包含0次)。 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串"aaa"與模式"a.a"和"ab*ac*a"匹配,但是與"aa.a"和"ab*a"均不匹配
知識點:
正規表示式:參考
思路:
1、兩個都為null時,不匹配
2、兩個陣列下標
3、1)如果模式中第二個字元不是'*':
如果當前字元匹配或者當前模式字元是'.' :則繼續檢驗;否則返回false
2)如果模式中第二個字元是'*':
如果當前字元與模式中當前字元匹配:則字元向後移一位,模式中不變;(n個字元匹配)
如果當前字元與模式中當前字元匹配或模式中當前字元是'.':則字元向後移一位,模式中向後移兩位;(乙個字元匹配)
如果模式中當前字元是'.'或沒有字元匹配:則字元向後移一位,模式中向後移兩位;(0個字元匹配)
答案:
public class solution
int strindex = 0;
int patternindex = 0;
return matchcore(str,strindex,pattern,patternindex);
}public boolean matchcore(char str,int strindex,char pattern,int patternindex)
//如果pattern先到尾,錯誤
if(strindex!=str.length&&patternindex==pattern.length)
//模式第2個是*,且字串第1個跟模式第1個匹配,分3種匹配模式;如不匹配,模式後移2位
if(patternindex+1}
//模式第2個不是*,且字串第1個跟模式第1個匹配,則都後移1位,否則直接返回false
if(strindex != str.length && (pattern[patternindex]==str[strindex] || pattern[patternindex]=='.'))else
}}
牛客網 正規表示式匹配
給出匹配串,給出模式串。給出兩種正則運算,乙個是.點 表示佔位代表任意乙個字元,乙個是字元 例如a 代表此處可以有任意個 前面的字元。一開始想著是正著慢慢模擬,但是顯然不可行,正著做顯然是直接使用了前面的字元,而每次特殊判斷字元後是不是 號過於複雜。第二個想著是倒著匹配,碰到 號了往新串中新增字元,...
正規表示式匹配字串
正規表示式用於字串處理 表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。匹配中文字元的正規表示式 u4e00 u9fa5 評注 匹配中文還真是個頭疼的事,有了這個表示式就好辦了 匹配雙位元組字元 包括漢字在內 x00 xff 評注 可以用來計算字串的長度 乙個雙位元組字元長度計...
正規表示式匹配 字串
正規表示式匹配字串 假使,有幾個需要驗證的字串用 連線在一起 形如 farmer1,1farmer234 想用正規表示式來匹配每乙個字串。private static string sourcestr farmer1,1farmer234 private static string key farm...