leetcode 438 [easy] ---文字列内のすべてのアナグラムを検索



Leetcode 438 Find All Anagrams String



与えられた文字列s空ではないストリングp、のすべての開始インデックスを見つけますpのアナグラムs

文字列は、小文字の英字のみと両方の文字列の長さで構成されますsそしてp20,100を超えることはありません。



出力の順序は重要ではありません。

例1:



Input: s: 'cbaebabacd' p: 'abc' Output: [0, 6] Explanation: The substring with start index = 0 is 'cba', which is an anagram of 'abc'. The substring with start index = 6 is 'bac', which is an anagram of 'abc'. 

例2:

Input: s: 'abab' p: 'ab' Output: [0, 1, 2] Explanation: The substring with start index = 0 is 'ab', which is an anagram of 'ab'. The substring with start index = 1 is 'ba', which is an anagram of 'ab'. The substring with start index = 2 is 'ab', which is an anagram of 'ab'. 

以前の実際のインタビューでこの質問を見ましたか?しない


アイデア:長い文字列Sと短い文字列Pが与えられた場合、pの順序がシャッフルされた後に可能なすべての文字列がsにあるかどうかを確認し、見つかった場合は、見つかったすべての開始位置を記録します。 。



考え方を学ぶには、まず2つの辞書を作成し、同じ長さのSとP(Pの長さ)をそれぞれ2つの辞書にインポートします。値は文字の出現回数に対応します。 (SとPの長さが異なるため、元のコードにこれらのステップがある理由を理解するのに長い時間がかかりました。これらのステップを使用してdictの長さを設定し、次のステップで保持して、基礎を提供します。 S保証とP保証を比較するため。)

whileループを使用して比較します( 'if sdic == pdic'がdictにある場合、key:valueが同じである限り、キーが表示される順序に関係なく、2つのdictが同じであることを意味します)、表示された文字を削除し、2つのdicキーの数が同じであることを確認します。