Pythonでパターンを見つけて置換する
単語のリストとパターンがあり、単語内のどの単語がパターンに一致するかを見つける必要があるとします。ここで、文字pの順列が存在する場合、単語はパターンに一致するため、パターン内のすべての文字xをp(x)に置き換えた後、ターゲット単語を取得します。与えられたパターンに一致する単語のリストを見つける必要があります。
たとえば、入力が["abc"、 "deq"、 "mee"、 "aqq"、 "dkd"、 "ccc"]のようで、パターンが "abb"の場合、出力は["mee"になります。 、「aqq」]、ここでmeeとaqqはパターン「abb」のスタイルと一致しています。ただし、「ccc」は順列ではないため、パターンではありません。
これを解決するには、次の手順に従います-
- 1つのconvert()メソッドを定義します。これは単語を入力として受け取り、次のように動作します-
- counter:=1、s:=empty string
- s:=s+カウンターに相当する文字列
- 1から単語の長さまでの範囲のiの場合– 1
- j:=i – 1
- while j> =0
- word[j]がword[i]の場合は、中断します
- jを1つ減らします
- j> -1の場合、s:=s + s [j]、それ以外の場合は、カウンターを1増やし、s:=s+カウンター値を文字列として
- return s
- 実際の方法は次のようになります
- 1つの配列word_numを作成します。これは空ですが、別の空の配列resを作成します
- 単語の各要素iについて-
- convert(i)をword_numに挿入します
- pattern:=convert(pattern)
- 0から単語の長さの範囲のiの場合– 1
- words_num [i] =patternの場合、words[i]をresに挿入します
- return res
理解を深めるために、次の実装を見てみましょう-
例
class Solution(object): def findAndReplacePattern(self, words, pattern): words_num = [] result = [] for i in words: words_num.append(self.convert(i)) pattern = self.convert(pattern) for i in range(len(words)): if words_num[i] == pattern: result.append(words[i]) return result def convert(self,word): counter = 1 s = "" s+=str(counter) for i in range(1,len(word)): j= i -1 while j>=0: if word[j] == word[i]: break j-=1 if j >-1: s+=s[j] else: counter+=1 s+=str(counter) return s ob = Solution() print(ob.findAndReplacePattern(["abc","deq","mee","aqq","dkd","ccc"],"abb"))
入力
["abc","deq","mee","aqq","dkd","ccc"] "abb"
出力
['mee', 'aqq']
-
PythonでO(n)時間とO(1)空間でBSTの中央値を見つける
二分探索木(BST)があるとすると、その中央値を見つける必要があります。偶数のノードの場合、中央値=((n / 2番目のノード+(n + 1)/ 2番目のノード)/ 2奇数のノードの場合、中央値=(n + 1)/2番目のノードです。 したがって、入力が次のような場合 その場合、出力は7になります これを解決するには、次の手順に従います- rootがNoneと同じ場合、 0を返す node_count:=ツリー内のノードの数 count_curr:=0 現在:=ルート currentがnullでない場合は、実行してください curren
-
PythonでOpenCVを使用して輪郭を検索して描画する
画像分析の目的で、Opencv(Open Source Computer Vision Library)pythonライブラリを使用します。 opencvのインストール後にインポートする必要のあるライブラリ名はcv2です。 以下の例では、画像ファイルに存在する輪郭を見つけます。輪郭は、画像に存在する形状を識別するのに役立ちます。等高線は、同じ強度を持つ画像の境界に沿ったすべての点を結ぶ線として定義されます。 OPenCVのfindContours関数は、輪郭を識別するのに役立ちます。同様に、drawContours関数は、輪郭を描画するのに役立ちます。以下は両方の構文です。 構文 cv.Fi