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

HIT_微笑前進發表於2015-03-28

題目: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>


相關文章