44. 萬用字元匹配
阿新 • • 發佈:2020-07-05
給定一個字串(s) 和一個字元模式(p) ,實現一個支援'?'和'*'的萬用字元匹配。
'?' 可以匹配任何單個字元。
'*' 可以匹配任意字串(包括空字串)。
兩個字串完全匹配才算匹配成功。
說明:
s可能為空,且只包含從a-z的小寫字母。
p可能為空,且只包含從a-z的小寫字母,以及字元?和*。
示例1:
輸入:
s = "aa"
p = "a"
輸出: false
解釋: "a" 無法匹配 "aa" 整個字串。
示例2:
輸入:
s = "aa"
p = "*"
輸出: true
解釋:'*' 可以匹配任意字串。
示例3:
輸入:
s = "cb"
p = "?a"
輸出: false
解釋:'?' 可以匹配 'c', 但第二個 'a' 無法匹配 'b'。
輸入:
s = "adceb"
p = "*a*b"
輸出: true
解釋:第一個 '*' 可以匹配空字串, 第二個 '*' 可以匹配字串 "dce".
示例5:
輸入:
s = "acdcb"
p = "a*c?b"
輸出: false
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/wildcard-matching
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思路:雙指標 模式串的指標 j 始終指向待匹配的
public static boolean isMatch(String s, String p) {int i=0; int j=0; int starPos=-1; //*號位置 int match=-1; //匹配*用 while(i<s.length()) { //當前兩個字元是否相同 if(j<p.length()&&(s.charAt(i)==p.charAt(j)||p.charAt(j)=='?')) { i++; j++; } //匹配到星號else if(j<p.length()&&p.charAt(j)=='*') { match = i; starPos = j; j=starPos+1; } //星號沒有匹配成功 else if(starPos!=-1) { match++; i=match; j=starPos+1; } else return false; } //abcd //a*d* while(j<p.length()&&p.charAt(j)=='*') { j++; } return j==p.length(); }