Python 解leetcode:3. Longest Substring Without Repeating Characters
阿新 • • 發佈:2017-12-08
bject tco 存在 leetcode left str block 出現 subst
題目描述:求一個字符串的不含重復字符的最長連續子串的長度;
- 思路:
- 使用一個哈希表保存字符出現的位置;
- 使用left和right分別表示子串的最左和最右字符的下標;
- 遍歷字符串,如果當前字符在哈希表中並且當前字符在哈希中的位置大於left,表明left和right之間存在和right索引上相同的字符,此時把left置為當前值在哈希表中的值;
- 把當前索引值+1,表示是第幾個字符,求出當前最大長度;
- 3-4步重復,直到獲得遍歷完成;
感覺這是個動態規劃題,暫時沒用動態規劃分析,後續再說。
class Solution(object):
def lengthOfLongestSubstring(self , s):
"""
:type s: str
:rtype: int
"""
hashes = {}
left, right, length = 0, 0, len(s)
max_len = 0
while right < length:
if hashes.get(s[right]) and hashes[s[right]] >= left:
left = hashes[s[right]]
hashes[s[right]] = right + 1
max_len = max(max_len, right - left + 1)
right += 1
return max_len
Python 解leetcode:3. Longest Substring Without Repeating Characters