python基礎(chǔ)算法之最長(zhǎng)子串問題

題目

找出一個(gè)字符串的最長(zhǎng)字符串,要求該字符串中沒有重復(fù)的字符。
注意點(diǎn):
考慮空字符等特殊情況
例子:
輸入: "abcabcbb" 輸出: 3
輸入: "bbbbbb" 輸出: 1

思路

思路1.0: 先分片,分完片之后找出最長(zhǎng)的
思路1.1: 不需要全分完再找最長(zhǎng)的,可以邊分邊從二者當(dāng)中選最大,例如第1,2個(gè)分片完成后即可選出最大的一個(gè)
思路2.0: 如何利用下標(biāo)分片?
循環(huán)遍歷,記下各個(gè)字母對(duì)應(yīng)的出現(xiàn)的最近一次下標(biāo),如果這次出現(xiàn)的下標(biāo)大,那么刷新目標(biāo)串的起始位置
思路2.1: 如何記錄?
用字典,列表都可,列表不允許in操作,那么就利用映射。

代碼參考

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s:
            return 0
        if len(s) <= 1:
            return len(s)
        locations = [-1 for i in range(256)]
        index = -1
        m = 0
        for i, v in enumerate(s):
            if (locations[ord(v)] > index):
                index = locations[ord(v)]
            m = max(m, i - index)
            locations[ord(v)] = i
        return m
if __name__ == "__main__":
    assert Solution().lengthOfLongestSubstring("abcea") == 4
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容