LeetCode(14)の最長の共通プレフィックス、strStr()(28)の実現

1.最長の共通プレフィックス(14)

タイトル説明:

ここに画像の説明を挿入します

トピックリンク

問題解決策1

  • zip(*)関数を使用して、文字列の1対1の対応する要素をリストに結合します
  • 次に、セットの重複排除を使用して、各リストセットの長さが1であるかどうかを判断し、プレフィックスに一貫性があるかどうかを判断します。

[Python3コード]

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        res=""
        for tmp in list(zip(*strs)):
            tmp_set=set(tmp)
            if len(tmp_set)==1:
                res+=tmp[0]
            else:
                break
        return res

問題解決2:二分探索

フォローアップサプリメント

2. strStr()(28)を実装します

タイトルの説明:
ここに画像の説明を挿入します
タイトルリンク

解決策1:部分文字列を1つずつ比較します

  • 針の長さのあるスライディングウィンドウを干し草の山の文字列に沿って徐々に移動し、ウィンドウ内の部分文字列を針の文字列と比較します。等しい場合は、最初の文字に対応するインデックスが返されます。
class Solution:
    def strStr(self, haystack: str, needle: str) -> int:
        L=len(haystack)
        R=len(needle)
        for i in range(L-R+1):
            if haystack[i:i+R]==needle:
                return i
        return -1
  • 時間計算量:O((N − R)R)O((N-R)R)O NR R 、ここで、Nは干し草の山のひもの長さ、Rは針のひもの長さです。内側のループで文字列を比較する複雑さはRであり、合計(N-R)の比較が必要です。

  • スペースの複雑さ:O(1)O(1)。

問題解決策2:ダブルポインタ

問題解決3:KMP

おすすめ

転載: blog.csdn.net/weixin_45666566/article/details/112425238