leetcode 44. Wildcard Matching
2017-07-14 16:08
288 查看
Implement wildcard pattern matching with support for
实现通配符匹配,有点像之前.*匹配,本来也是用递归做,但是超时
于是改成以前解决背包问题的类似方法,用动态规划dp数组
dp[i][j] 表示p[i]与s[j]的匹配情况,可以分为:
如果p[i]=*,则dp[i][j]=dp[i-1][j-1] || dp[i-1][j] || dp[i][j-1] ;
如果p[i]=? || p[i]=s[j],则dp[i][j]=dp[i-1][j-1];
最后返回dp[m]
即可。
其实与递归的公式是一样的,主要是对*处理:T(i,j)=T(i-1,j) || T(i,j-1) || T(i-1,j-1)
'?'and
'*'.
'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). The matching should cover the entire input string (not partial). The function prototype should be: bool isMatch(const char *s, const char *p) Some examples: isMatch("aa","a") ? false isMatch("aa","aa") ? true isMatch("aaa","aa") ? false isMatch("aa", "*") ? true isMatch("aa", "a*") ? true isMatch("ab", "?*") ? true isMatch("aab", "c*a*b") ? false
实现通配符匹配,有点像之前.*匹配,本来也是用递归做,但是超时
于是改成以前解决背包问题的类似方法,用动态规划dp数组
dp[i][j] 表示p[i]与s[j]的匹配情况,可以分为:
如果p[i]=*,则dp[i][j]=dp[i-1][j-1] || dp[i-1][j] || dp[i][j-1] ;
如果p[i]=? || p[i]=s[j],则dp[i][j]=dp[i-1][j-1];
最后返回dp[m]
即可。
其实与递归的公式是一样的,主要是对*处理:T(i,j)=T(i-1,j) || T(i,j-1) || T(i-1,j-1)
public boolean isMatch(String s, String p) { if(s==null||p==null)return false; if(p.length()<1&&s.length()<1)return true; if(p.length()<1&&s.length()>0)return false; if(s.length()<1&&p.length()>0&&p.charAt(0)!='*'){ return false; } int m=p.length(); int n=s.length(); boolean dp[][] = new boolean[m+1][n+1]; dp[0][0]=true; for(int i=1;i<=m;i++){ if(p.charAt(i-1)=='*'){ dp[i][0]=dp[i-1][0]; for(int j=1;j<=n;j++){ dp[i][j]=dp[i-1][j-1]||dp[i-1][j]||dp[i][j-1]; } } else{ for(int j=1;j<=n;j++){ if(p.charAt(i-1)==s.charAt(j-1)||p.charAt(i-1)=='?'){ dp[i][j]=dp[i-1][j-1]; } } } } return dp[m] ; }
相关文章推荐
- leetcode 44. Wildcard Matching
- LeetCode 44 - Wildcard Matching
- LeetCode 44. Wildcard Matching
- 【leetcode 44】Wildcard Matching
- LeetCode 44. Wildcard Matching
- LeetCode 44:Wildcard Matching
- [*leetcode 44]. Wildcard Matching
- Leetcode (44) Wildcard Matching
- LeetCode44 Wildcard Matching
- Leetcode:44. Wildcard Matching
- LeetCode 44 Wildcard Matching
- LeetCode44. Wildcard Matching
- leetcode 44. Wildcard Matching
- Leetcode习题解答:44. Wildcard Matching
- [leetcode 44] Wildcard Matching
- leetcode 44. Wildcard Matching
- [leetcode[ 【字符串】 44. Wildcard Matching
- leetcode 44. Wildcard Matching
- leetcode 44. Wildcard Matching
- LeetCode 44. Wildcard Matching