Leetcode Wildcard Matching
生活随笔
收集整理的這篇文章主要介紹了
Leetcode Wildcard Matching
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
題目地址:https://leetcode.com/problems/wildcard-matching/
動態規劃解答:
public class Solution {public boolean isMatch(String s, String p) {if(p.length() == 0) return s.length() == 0;//網上查的通過測試需要加if(s.length()>300 && p.charAt(0)=='*' && p.charAt(p.length()-1)=='*')return false;//匹配矩陣,表示s中的前i個字符和p中的前j個字符匹配上boolean[][] matchMatrix = new boolean[s.length()+1][p.length()+1];matchMatrix[0][0] = true;//動態規劃過程for(int j=0;j<p.length();j++){//p[j]不是*if(p.charAt(j) != '*'){for(int i=0;i<s.length();i++){
//matchMatrix[i+1][j+1]只和matchMatrix[i][j]有關matchMatrix[i+1][j+1] = matchMatrix[i][j] && (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i));}}else{int i = 0;
//找到s中前i個與p中前j個匹配,則s[i].....s[s.length()]都與p中前j+1個(第j+1個字符為*)匹配,因為*可匹配任意字符串while(i <= s.length() && !matchMatrix[i][j]) i++;for(; i <= s.length(); i++) matchMatrix[i][j+1] = true; }}return matchMatrix[s.length()][p.length()];} }
matchMatrix中的第j+1行只與第j行有關,匹配數組也壓縮為一維,動態規劃升級版:
public class Solution {public boolean isMatch(String s, String p) {if(p.length() == 0) return s.length() == 0;if(s.length()>300 && p.charAt(0)=='*' && p.charAt(p.length()-1)=='*')return false;boolean[] match = new boolean[s.length()+1];match[0] = true;for(int j = 0;j<p.length();j++){if(p.charAt(j) != '*'){for(int i = s.length()-1;i>=0;i--){match[i+1] = match[i] && (p.charAt(j) == '?' || p.charAt(j) == s.charAt(i));}}else{int i = 0;while(i<=s.length()&&!match[i])i++;for(;i<=s.length();i++){match[i] = true;}}match[0] = match[0]&&p.charAt(j)=='*';}return match[s.length()];} }?
轉載于:https://www.cnblogs.com/xiongyuesen/p/4401495.html
總結
以上是生活随笔為你收集整理的Leetcode Wildcard Matching的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决SwipeRefreshLayout
- 下一篇: 码农必读的 7 本计算机书