萬用字元匹配

2021-10-07 18:58:34 字數 1518 閱讀 4501

題目:力扣

解題思路:

一開始用了遞迴來做,超時了

遞迴的思路:

1、當字串和模式串為空時,直接返回true。

2、當字串不為空但模式串為空時,返回false

3、當字串為空時,模式串不為空,需要判斷,如果模式串全為*,則返回true,否則返回false。

4、當字串和模式串均不為空時,也需要判斷。

先判斷第乙個字元是否相等

當第乙個字元相等時,返回ismatch(s.substring(1,s_len),p.substring(1,p_len)),只需要匹配剩下的就好。

當first不相等時,且模式串字元為*時,這時需要判斷

當模式串只有乙個*字元,直接返回true

當字串為空,模式串長度大於1時,返回ismatch(s,p.substring(1,p_len))

其他的情況,直接返回ismatch(s.substring(1, s_len), p) || ismatch(s, p.substring(1, p_len)),前面的是*包含字元的情況,後面的是*代表空串的情況。

當first不相等時,當模式串的字元不為*,其實只是乙個普通字母,則直接返回false。

動態規劃的思路:

用dp[i][j]表示字串前i個字元和字串前j個字元是否匹配,匹配為true,否則為false

比較第i個和第j個字元

當相等,或者模式字元為?時, dp[i][j] = dp[i-1][j-1]。

當模式串字元為*時,dp[i][j] = dp[i-1][j] || dp[i][j-1]

class solution 

if(s_len != 0 && p_len == 0)

boolean first = false;

if(s_len != 0 && (s.charat(0) == p.charat(0) || p.charat(0) == '?') )

if(first == true)

return ismatch(s.substring(1,s_len),p.substring(1,p_len));

else if(first == false && p.charat(0) =='*')

if(s_len == 0)

//這一步,計算有重複導致超時

return (ismatch(s.substring(1, s_len), p) || ismatch(s, p.substring(1, p_len)));

}else

return false;

}}

class solution  else 

}for(int i = 1; i <= s_len; i++)

else if(p.charat(j-1) == '*')}}

return dp[s_len][p_len];

}}

萬用字元匹配

implement wildcard pattern matching with support for and matches any single character.matches any sequence of characters including the empty sequence ...

萬用字元匹配

給定乙個輸入字串s 和模式p,p包含萬用字元?與星號 其中輸入s包含小寫字母a z,p包含小寫字母a z與?和星號,可以匹配任一字元,星號 可以匹配多個字元,包括空字元。給定輸入s與p,判斷s 與 p是否完全匹配。example 1 input s aa p a output false expla...

萬用字元匹配

1.遇到s和p都是 則直接返回true 2.判斷邊界條件如果s串已經遍歷完畢,則判斷p串是否便利完畢,如果p串長度大於s串,則判斷大於部分是否都是 如果是則返回true,否則返回false 3.判斷邊界條件如果p串已經便利完畢,則判斷s串是否便利完畢,是則返回true,否則返回false 4.判斷字...