与えられた文字列内のユニークな部分文字列の検索
7875 ワード
文字列
キューで
我々は、キューの助けを借りてそれを行うことができます.
これがロジックです.指定された文字列を受け取り、キュー562479142に追加します. 、ステップ3 - 5を繰り返してください. は これを は、 キューが空であるならば、印刷
再帰的に
ここではロジックは同じですが、1つのヘルパー関数を使って再帰的に行います.
複雑さ
私たちがユニークな値(ここで、Nが与えられたストリングの長さ)をチェックするためにセットを使用しないならば、私はここで最悪のケース時間が
最後の思考
どこでこれを使えますか.したら、基本的なロジックを理解すると、多くの文字列関連の問題を解決するために使用することができます.例:Finding the longest palindromic substring.
これを達成する様々な(より簡単な)方法があるかもしれません、しかし、私はこのアプローチがプロセスを視覚化するのを援助すると思います.読書ありがとうございます!)
abc
を考えると、以下のユニークな文字列を生成することです.['abc', 'bc', 'ab', 'c', 'b', 'a']
キューで
我々は、キューの助けを借りてそれを行うことができます.
これがロジックです.
q
が空でない間、q
の最初の項目をポップします.q
という最終結果リストに追加します.res
に既にない場合に限り、左の部分文字列(例えばab
)と右部分文字列(例えばbc
)をキューに追加します.res
.def findSubstrings(s):
res = set()
q = [s]
while q:
s = q.pop(0)
res.add(s)
x = 0
y = len(s)-1
right_string = s[x+1:y+1]
left_string = s[x:y]
if right_string and right_string not in res:
q.append(right_string)
if left_string and left_string not in res:
q.append(left_string)
return res
r = list(findSubstrings('abc'))
r.sort(key=len, reverse=True)
print(r)
# Result:
# ['abc', 'ab', 'bc', 'b', 'c', 'a']
再帰的に
ここではロジックは同じですが、1つのヘルパー関数を使って再帰的に行います.
def findSubstrings(s):
res = set()
def helper(s):
if len(s) <= 0:
return
res.add(s)
right_string = s[1:len(s)]
left_string = s[0:len(s)-1]
if right_string not in res:
helper(right_string)
if left_string not in res:
helper(left_string)
helper(s)
return res
r = list(findSubstrings('abc'))
r.sort(key=len, reverse=True)
print(r)
# Result:
# ['abc', 'ab', 'bc', 'b', 'c', 'a']
複雑さ
私たちがユニークな値(ここで、Nが与えられたストリングの長さ)をチェックするためにセットを使用しないならば、私はここで最悪のケース時間が
res
でありえたと思います.最後の思考
どこでこれを使えますか.したら、基本的なロジックを理解すると、多くの文字列関連の問題を解決するために使用することができます.例:Finding the longest palindromic substring.
これを達成する様々な(より簡単な)方法があるかもしれません、しかし、私はこのアプローチがプロセスを視覚化するのを援助すると思います.読書ありがとうございます!)
Reference
この問題について(与えられた文字列内のユニークな部分文字列の検索), 我々は、より多くの情報をここで見つけました https://dev.to/omkarscode/finding-unique-substrings-in-a-given-string-528lテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol