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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...

發布時間:2023/12/4 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

·代表任意一個字符,*代表任意一串字符,判斷兩個字符串是否匹配? 如題,·代表任意一個字符,*代表任意一串字符,判斷兩個字符串是否匹配?假如a字符串為:as*bnc·b,b字符串為asdfgvbbnchb,則這倆個字符串匹配。

public class MyTest{

public static void main(String[] args) {

System.out.println(isMatch("as111111dfgvbbnchb","as*bnc.b"));

}

/**

*?動態規劃法判斷普通字符串是否與通配符字符串匹配。

*

*?

*?算法思路:

*?設s為普通字符串,p為通bai配符字符串,字符串中字符編號以0起始。

*?申請布爾型數組?dp[s.length+1][p.length+1]。

*?1.?dp[0][0]表示s為空串、p為空串時是否匹配,顯然為true,dp[0][0]=true。

*?2.?dp[0][j+1],0=

*????當dp[0][j]=true且p[j]='*'時,dp[0][j+1]=true。

*????如果dp[0][j]=false,即p[0..j-1]已經不能與空串匹配了,顯然加上p[j]

*????也不能匹配。

*????如果p[j]!='*',則p[j]必須與一個字符匹配,而s為空串,顯然不能匹配。

*?3.?dp[i+1][j+1]表示s[0..i]與p[0..j]是否匹配。

*??3.1?如果p[j]='*',那么可以有兩種匹配方式:

*??????方式1.?p[j]與s[i]匹配,s[i]被匹配掉后,還需判斷s[0..i-1]是否與

*??????p[0..j]匹配,故dp[i+1][j+1]=dp[i][j+1]。

*??????方式2.?p[j]不與s[i]匹配,這時還需判斷s[0..i]是否與p[0..j-1]匹配,

*??????故dp[i+1][j+1]=dp[i+1][j]。

*??????綜合兩種情況,dp[i+1][j+1]=dp[i][j+1]||dp[i+1][j]。

*??3.2?如果p[j]='.',則p[j]必須和s[i]匹配,還需判斷s[0..i-1]是否與

*??????p[0..j-1]匹配,故dp[i+1][j+1]=dp[i][j]。

*??3.3?如果p[j]為其他字符并且與s[i]相同,則p[j]必須和s[i]匹配,還需判斷

*??????s[0..i-1]是否與p[0..j-1]匹配,故dp[i+1][j+1]=dp[i][j]。

*??????這種情況可以與情況3.2合并。

*?最終?dp[s.length][p.length]?即表示s與p是否匹配。

*?

*

*?@param?s

*??????????普通字符串。

*?@param?p

*??????????通配符字符串。

*?@return?如果普通字符串與通配符字符串匹配則返回true,否則返回false。

*/

public static boolean isMatch(String s,String p) {

boolean[][] dp = new boolean[s.length()+1][p.length()+1];

dp[0][0]=true;

for(int j = 0;j

if(dp[0][j] && p.charAt(j) == '*') {

dp[0][j+1] = true;

}

}

for(int i = 0;i < s.length();i++) {

for(int j = 0;j < p.length();j++) {

if(p.charAt(j) == '*') {

dp[i+1][j+1] = dp[i][j+1]|| dp[i+1][j];

}else if(p.charAt(j) == '.' || p.charAt(j) == s.charAt(i)) {

dp[i+1][j+1] = dp[i][j];

}

}

}

return dp[s.length()][p.length()];

}

}

總結

以上是生活随笔為你收集整理的java匹配两个字符_·代表任意一个字符,*代表任意一串字符,判断两个字符串是否匹配?...的全部內容,希望文章能夠幫你解決所遇到的問題。

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