Pythonでのワイルドカードマッチング
-
ドット「?」は任意の1文字に一致します
-
スター「*」は0個以上の文字に一致します。
したがって、たとえば、入力がs =“ aa”およびp =“ a?”の場合、それはtrueになります。同じ入力文字列に対して、パターンが“?*”の場合、trueになります。
これを解決するには、次の手順に従います-
-
ss:=sのサイズとps:=pのサイズ
-
dpをサイズssxpsの行列にし、false値を使用してこれを埋めます
-
これらの前に1つの空白スペースを追加して、pとsを更新します
-
1からpsの範囲のiの場合-
-
p [i] =スターの場合、
-
dp [0、i]:=dp [0、i-1]
-
-
-
1からssの範囲のiの場合
-
1からpsの範囲のjの場合
-
s[i]がp[j]の場合、またはp [j]が「?」の場合、
-
dp [i、j]:=dp [i – 1、j – 1]
-
-
それ以外の場合、p [j]がスターの場合、
-
dp [i、j]:=dp [i – 1、j]およびdp [i、j – 1]
の最大値
-
-
-
-
dp [ss、ps]
を返します
例(Python)
理解を深めるために、次の実装を見てみましょう-
class Solution(object): def isMatch(self, s, p): sl = len(s) pl = len(p) dp = [[False for i in range(pl+1)] for j in range(sl+1)] s = " "+s p = " "+p dp[0][0]=True for i in range(1,pl+1): if p[i] == '*': dp[0][i] = dp[0][i-1] for i in range(1,sl+1): for j in range(1,pl+1): if s[i] == p[j] or p[j] == '?': dp[i][j] = dp[i-1][j-1] elif p[j]=='*': dp[i][j] = max(dp[i-1][j],dp[i][j-1]) return dp[sl][pl] ob = Solution() print(ob.isMatch("aa", "a?")) print(ob.isMatch("aaaaaa", "a*"))
入力
"aa", "a." "aaaaaa", "a*"
出力
True True
-
Pythonのissuperset()
この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',
-
PythonでOpenCVを使用したテンプレートマッチング
テンプレートマッチングは、パッチまたはテンプレートを実際の画像からマッチングできる手法です。これは基本的にパターンマッチングメカニズムです。 PythonにはOpenCVモジュールがあります。 openCVを使用すると、一致するものを簡単に見つけることができます。したがって、この問題では、OpenVCテンプレートマッチング手法が使用されます。 OpenCV機能を使用するには、 pipを使用してダウンロードする必要があります 。 sudo pip3 install opencv-python テンプレートマッチングタスクには、精度係数があります。この係数はしきい値と呼ばれます。一例とし