無重複字符的最長子串

每天堅持刷題!!!

無重複字符的最長子串

題目描述:
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

例子:
輸入: "pwwkew"
輸出: 3
解釋: 因爲無重複字符的最長子串是 "wke",所以其長度爲 3。
 請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串

題目分析:

  1. 簡單的方法是遍歷整個字符串,因爲是子串,所以追蹤子串的起點和重點。遍歷到新的字符時,檢查是否已經在起點和終點的範圍內出現,如果出現就捨棄掉起點到這個出現的位置的數據,起點重新標示爲發現的位置加一,終點位置也加一,同時判斷起點和終點的距離是否大於最大值
class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        if not s or len(s) == 1:  # 邊界條件
            return len(s)
        begin, end, max_length = 0, 0, 1
        for idx, val in enumerate(s):
            if idx == 0:
                continue
            for new_id in xrange(begin, end+1):
                if val == s[new_id]:
                    begin = new_id + 1
                    end = idx
                    break
            else:  # 沒發現有重複值則終點前進一位
                end = idx 
                max_length = max(end - begin + 1, max_length)
        return max_length
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章