1. 程式人生 > >【LeetCode】Wildcard Matching 串匹配 動態規劃

【LeetCode】Wildcard Matching 串匹配 動態規劃

<span style="font-size:18px;">/*LeetCode WildCard matching
 * 題目:給定一個目標串和一個匹配串,判定是否能夠匹配
 * 匹配串中的定義:字元————>字元,*————>0個、1個或者多個字元,?——————>對應任意一個字元
 * 思路:動態規劃:*:dp[i][j] = dp[i][j-1] || dp[i-1][j]
 * 				? || s[i] == p[i] :dp[i][j] = dp[i-1][j-1]
 */
package javaTrain;

public class Train23 { 
	    public boolean isMatch(String s, String p) {
	        int len_s = s.length();
	        int len_p = p.length();
	        char[] sArray = new char[len_s];
	        char[] pArray = new char[len_p];
	        sArray = s.toCharArray();
	        pArray = p.toCharArray();
	        boolean dp[][] = new boolean[500][500];	//用於記錄每個子問題的解
	        int lens = 0;
	        if(len_p != 0){ 
	            for(int i = 0;i < len_p;i++)
	                if(pArray[i] != '*') lens++;
	        }
	        if(lens > len_s) return false;
	        
	        dp[0][0] = true;	//兩個串都是空的for
	        for(int j = 1;j <= len_p;j++){
	        	if(dp[0][j-1] && pArray[j-1] == '*') dp[0][j] = true; 
	        	for(int i = 1;i <= len_s;i++){
	        		if(pArray[j-1] == '*') dp[i][j] = dp[i][j-1] || dp[i-1][j];
	        		else if(pArray[j-1] == '?'||pArray[j-1] == sArray[i-1]) dp[i][j] = dp[i-1][j-1];
	        		else dp[i][j] = false;
	        	}
	        }
	        return dp[len_s][len_p];
	    }
} 
</span>

相關推薦

LeetCodeWildcard Matching 匹配 動態規劃

<span style="font-size:18px;">/*LeetCode WildCard matching * 題目:給定一個目標串和一個匹配串,判定是否能夠匹配 * 匹配串中的定義:字元————>字元,*————>0個、1個或者多個

leetcodeUnique Paths II(動態規劃

63. Unique Paths II 題目描述 Discuss Pick One Follow up for “Unique Paths”: Now consider if some obstacles are added to the gr

KMP字符匹配

esp 一次 AD 難點 main 問題: clu space names 問題: 字符串s="ABBCABCDABDADSBC",p="ABCDABD",問p在s中第一次出現的索引,未找到則返回-1 思路: 暴力求解:時間復雜度O(m*n),其中m、n分別為s、p的長

題解字符匹配

fin can pre pri 長度 click name ios char 題目描述   給定N個字符串(第i個字符串長度為Mi,字符串內包含數字、大小寫字母,大小寫敏感),請求出N個字符串中共有多少個不同的字符串。 輸入輸出格式 輸入格式   第一行包含一

轉載多模式匹配之AC自動機

content 2.4 n) ptr float char toggle msg align 原文地址:https://www.cnblogs.com/codeape/p/3845375.html

bzoj1109[POI2007]堆積木Klo 動態規劃+樹狀數組

pan ret 選擇 data 成了 std cpp name 樹狀數組 題目描述 Mary在她的生日禮物中有一些積木。那些積木都是相同大小的立方體。每個積木上面都有一個數。Mary用他的所有積木壘了一個高塔。媽媽告訴Mary遊戲的目的是建一個塔,使得最多的積木在正確的位

bzoj2216[Poi2011]Lightning Conductor 1D1D動態規劃優化

規劃 sample long 得到 mes tput stream truct 優化 Description 已知一個長度為n的序列a1,a2,…,an。對於每個1<=i<=n,找到最小的非負整數p滿足 對於任意的j, aj < = a

BZOJ4872分手是祝願(動態規劃,數學期望)

esp math map ostream pac mes ++i rac define 【BZOJ4872】分手是祝願(動態規劃,數學期望) 題面 BZOJ 題解 對於一個狀態,如何求解當前的最短步數? 從大到小枚舉,每次把最大的沒有關掉的燈關掉 暴力枚舉因數關就好 假設我

題解 [HNOI/AHOI2018]道路 (動態規劃

() 簡單 https it is min UC def main std 懶得復制,戳我戳我 Solution: \(dp[i][j][k]\)以\(i\)為子樹根節點,到根節點中有\(j\)條公路沒修,\(k\)條鐵路沒修,存子樹不便利和 \(dp[i][j][k]=

題解 bzoj4472: [Jsoi2015]salesman (動態規劃

規劃 problem 越界 PE names 子節點 tin www. uniq bzoj4472,懶得復制,戳我戳我 Solution: 體面意思:從\(1\)號節點出發,每到一個節點就必須停下,獲得節點權值(每個節點只會獲得一次),每個點有個規定的停留次數,求最大可獲

BZOJ3991尋寶遊戲(動態規劃

維護 inline printf insert struct print clu getch map 【BZOJ3991】尋寶遊戲(動態規劃) 題面 BZOJ 題解 很明顯,從任意一個有寶藏的點開始,每次走到相鄰的\(dfs\)的節點就行了。 證明? 類似把一棵樹上的關鍵點

BZOJ4654NOI2016國王飲水記(動態規劃,斜率優化)

code 奇怪 while lib show ima double 優化 .com 【BZOJ4654】【NOI2016】國王飲水記(動態規劃,斜率優化) 題面 BZOJ 洛谷 題解 首先肯定是找性質。 明確一點,比\(h_1\)小的沒有任何意義。 所以我們按照\(h\)排

BZOJ3203保護出題人(動態規劃,斜率優化)

現在 bzoj3203 d+ while 我們 register 攻擊 nod http 【BZOJ3203】保護出題人(動態規劃,斜率優化) 題面 BZOJ 洛谷 題解 在最優情況下,肯定是存在某只僵屍在到達重點的那一瞬間將其打死 我們現在知道了每只僵屍到達終點的時間,因

BZOJ4006管道連接(動態規劃,斯坦納樹)

map 動態 code ring class new get efi include 題面 BZOJ 洛谷 題解 和這題區別不是很大吧。 基本上拿過來改一下就做完了。 #include<iostream> #include<cstdio> #incl

BZOJ1294[SCOI2009]圍豆豆(動態規劃,狀壓)

bool pre max += 網格 中心 是否 ret algo 【BZOJ1294】[SCOI2009]圍豆豆(動態規劃,狀壓) 題面 BZOJ 洛谷 題解 首先考慮如何判斷一個點是否在一個多邊形內(不一定是凸的),我們從這個點開始,朝著一個方向畫一條射線,看看它和這個

BZOJ3193[JLOI2013]地形生成(動態規劃

【BZOJ3193】[JLOI2013]地形生成(動態規劃) 題面 BZOJ 洛谷 題解 第一問不難,首先按照山的高度從大往小排序,這樣子只需要抉擇前面有幾座山就好了。然而有高度相同的山。其實也不麻煩,把高度相同的山按照關鍵數字排序,這樣子即使是高度相同的山,也可以變成多出位置可以放進來,只需要記錄前

轉載通過金礦模型介紹動態規劃 (動態規劃入門)

先附上原文地址:http://www.cnblogs.com/sdjl/articles/1274312.html 通過金礦模型介紹動態規劃         對於動態規劃,每個剛接觸的人都需要一段時間來理解,特別是第一次接觸的時候總是想不通為什麼這種方法可行,這篇文章就是為了

APIO2009T1採油區域-分類討論+動態規劃

測試地址:採油區域 題目大意:給定一個M×N的僅含非負整數的矩陣,要求找出三個不相交的K×K區域使區域內整數之和最大,輸出這個最大值。 做法:這道題目需要用到分類討論+動態規劃。 因為不能相交,所以三個正方形區域的位置關係一定可以被歸為下列情況之一: 1

BZOJ1494NOI2007生成樹計數(動態規劃,矩陣快速冪)

題面 Description 最近,小棟在無向連通圖的生成樹個數計算方面有了驚人的進展,他發現: ·n個結點的環的生成樹個數為n。 ·n個結點的完全圖的生成樹個數為n^(n-2)。這兩個發現讓小棟欣喜若狂,由此更加堅定了他繼續計算生成樹個數的 想法,他

BZOJ5314[JSOI2018]潛入行動(動態規劃

names pan getchar 集合 main def mat 全局 動態規劃 【BZOJ5314】[JSOI2018]潛入行動(動態規劃) 題面 BZOJ 洛谷 題解 不難想到一個沙雕\(dp\),設\(f[i][j][0/1][0/1]\)表示當前點\(i\),子樹