日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 字符正则匹配算法_算法之字符串——正则表达式匹配

發布時間:2025/4/16 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 字符正则匹配算法_算法之字符串——正则表达式匹配 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

難度 困難

請實現一個函數用來匹配包含’. ‘和’*‘的正則表達式。模式中的字符’.’表示任意一個字符,而’*‘表示它前面的字符可以出現任意次(含0次)。在本題中,匹配是指字符串的所有字符匹配整個模式。例如,字符串”aaa”與模式”a.a”和”abaca”匹配,但與”aa.a”和”ab*a”均不匹配。

s 可能為空,且只包含從 a-z 的小寫字母。

p 可能為空,且只包含從 a-z 的小寫字母以及字符 . 和 *,無連續的 '*'。

示例 1:

輸入:

s = “aa”

p = “a”

輸出: false

解釋: “a” 無法匹配 “aa” 整個字符串。

示例 2:

輸入:

s = “aa”

p = “a*“

輸出: true

解釋: 因為 ‘*‘ 代表可以匹配零個或多個前面的那一個元素, 在這里前面的元素就是 ‘a’。因此,字符串 “aa” 可被視為 ‘a’ 重復了一次。

示例 3:

輸入:

s = “ab”

p = “.*”

輸出: true

解釋: “.*” 表示可匹配零個或多個(’*‘)任意字符(’.’)。

示例 4:

輸入:

s = “aab”

p = “c*a*b”

輸出: true

解釋: 因為 ‘*’ 表示零個或多個,這里 ‘c’ 為 0 個, ‘a’ 被重復一次。因此可以匹配字符串 “aab”。

示例 5:

輸入:

s = “mississippi”

p = “mis*is*p*.”

輸出: false

一開始的思路,,,,好吧沒有思路

只能使用字符串中關于正則的匹配API,代碼如下

class Solution {

public boolean isMatch(String s, String p) {

return s.matches(p);

}

}

其實我們仔細考慮一下,無非就是分三種情況

假設主串為 A,模式串為 B , A 的長度為 n ,B 的長度為 m ,關注正則表達式 B 的最后一個字符是誰,它有三種可能,正常字符,* 和 .(點),那針對這三種情況討論即可,如下:

如果 B 的最后一個字符是正常字符,那就是看 A[n-1] 是否等于 B[m-1],相等則看 A_{0..n-2}與 B_{0..m-2},不等則是不能匹配,這就是子問題。

如果 B 的最后一個字符是 .(點) ,它能匹配任意字符,直接看 A_{0..n-2}與 B_{0..m-2}

如果 B 的最后一個字符是 * ,它代表 B[m-2]=c 可以重復0次或多次,它們是一個整體 c*

情況一:A[n-1]是 0個 c,B 最后兩個字符廢了,能否匹配取決A_{0..n-1}和 B_{0..m-3}是否匹配

情況二:A[n-1]是多個 c 中的最后一個(這種情況必須 A[n?1]=c 或者 c=’.’),所以 A 匹配完往前挪一個,B 繼續匹配,因為可以匹配多個,繼續看 A_{0..n-2}和 B_{0..m-1}是否匹配。

先來個某大神動態規劃的思路

轉移方程

f[i][j] 代表 A 的前 i 個和 B 的前 j 個能否匹配

對于前面兩個情況,可以合并成一種情況 f[i][j] = f[i-1][j-1]

對于第三種情況,對于 c* 分為看和不看兩種情況

不看:直接砍掉正則串的后面兩個, f[i][j] = f[i][j-2]

看:正則串不動,主串前移一個,f[i][j] = f[i-1][j]

特判:需要考慮空串空正則

空串和空正則是匹配的,f[0][0] = true

空串和非空正則,不能直接定義 true 和 false ,必須要計算出來。(比如A=” “ ,B=abc*)

非空串和空正則必不匹配,f[1][0]=…=f[n][0]=false

非空串和非空正則,那肯定是需要計算的了。

大體上可以分為空正則和非空正則兩種,空正則也是比較好處理的,對非空正則我們肯定需要計算,非空正則的三種情況,前面兩種可以合并到一起討論,第三種情況是單獨一種,那么也就是分為當前位置是 * 和不是 * 兩種情況了。

再來個遞歸代碼,遞歸代碼與上面的思路其實是一樣的

package ddx.september.day29;

public class Normal_19 {

public boolean isMatch(String s, String p) {

if (s.length() == 0 ) {

//主串為空

if (p.length() % 2 != 0) {

//模式串長度為奇數,則一定不匹配,因為抵消不了奇數

//例如:"." , "ab*","abc"

return false;

} else {

//長度為偶數,只需要判斷偶數位上是不是*即可!

int i = 1;

while (i < p.length()) {

if (p.charAt(i) != '*') {

return false;

}

i += 2;

}

return true;

}

} else if (p.length() == 0) {

//模式串為空

return false;

} else {

char ch1 = s.charAt(0); //s的首位

char ch2 = p.charAt(0); //p的首位

char ch3 = 'a'; //p的下一位

if(p.length() > 1){

ch3 = p.charAt(1);

}

//照樣分情況,看看是不是*

if(ch3 != '*'){

if(ch2 == ch1 || ch2 == '.'){

return isMatch(s.substring(1),p.substring(1));

}else{

//連正常字符和.都匹配不上

return false;

}

}else{

//難點就在于ch3是 *

//正常字符相等,或者是.

//即選擇或者不選擇!!!

//"aa"

//"a*a"

//上面兩個字符串,碰到*可以選擇,也可以不選擇

if(ch2 == ch1 || ch2 == '.'){

//前者是選擇,后者是不選擇

return isMatch(s.substring(1),p) || isMatch(s,p.substring(2));

}else{

//連正常字符和.都匹配不上,那么ch2 和 ch3廢了!!!!

return isMatch(s,p.substring(2));

}

}

}

}

}

本作品采用《CC 協議》,轉載必須注明作者和本文鏈接

總結

以上是生活随笔為你收集整理的java 字符正则匹配算法_算法之字符串——正则表达式匹配的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产又粗又黄又爽又硬 | 国产靠逼视频 | 小泽玛利亚在线 | 毛片av在线 | aa级黄色片 | 97视频在线观看免费高清完整版在线观看 | 中文字幕乱码在线观看 | 美女靠逼视频网站 | 久久狠狠干 | 亚洲色图小说 | 国产成人精品免高潮在线观看 | 成人性免费视频 | 日本一二区视频 | 免费看污片的网站 | 久久亚洲AV无码专区成人国产 | 91亚洲欧美 | 在线视频日韩 | 一区二区三区四区中文字幕 | 久草资源福利 | 日操干| 精品91在线 | 欧美成人免费在线视频 | 最新国产网站 | 中国黄色1级片 | 国产精品污视频 | 久久高清一区 | 高清国产一区 | 亚洲激情黄色 | 丰满岳妇伦在线播放 | 亚洲啪啪网址 | 成人h片在线观看 | 亚洲在线 | 日韩一区二区在线免费观看 | 在线91观看 | 香蕉视频色版 | 午夜av中文字幕 | 99久久精品免费看国产交换 | a在线免费| 国产一区99 | 97视频在线看 | 日韩性生活视频 | 五月丁香综合激情六月久久 | 亚洲特级片 | 91在线在线 | 鲁大师私人影院在线观看 | 亚洲黄色精品 | 四色成人av永久网址 | 欧美四虎 | 超碰在线资源 | 欧美国产成人精品一区二区三区 | 久久国产成人精品国产成人亚洲 | 香蕉国产 | 手机成人av | 黄色三级在线 | 久久久久亚洲av片无码下载蜜桃 | 综合色吧 | 天堂精品视频 | 国产青青草 | 婷婷激情久久 | 国产一区美女 | 国产富婆一区二区三区 | 午夜日韩精品 | 激情小说五月天 | 亚洲干综合 | 国内视频精品 | 成人深夜福利视频 | 在线观看成人免费视频 | 无码人妻精品一区二区三区蜜桃91 | 91免费看.| 国产午夜电影在线观看 | 麻豆短视频| 91视频.com| 中文字幕亚洲高清 | 91精品国产综合久久久蜜臀 | 久久免费一级片 | а中文在线天堂 | 日本中文字幕网 | 日韩av综合 | 国产素人av | 超碰资源总站 | 按摩害羞主妇中文字幕 | 91av日本 | 97精品国产97久久久久久粉红 | 在线超碰| 色播日韩 | 日韩黄色网址 | 国产黄色自拍 | 少女视频的播放方法 | 国产精品国产成人国产三级 | 丁香激情网 | 久久久香蕉 | 日韩精品一区二区三区中文字幕 | 男人插女人网站 | 午夜性生活视频 | 福利视频99 | 欧美a级片在线观看 | 中国美女性猛交 | 久久精品—区二区三区舞蹈 | 免费日韩av |