每天堅持刷題!!!
無重複字符的最長子串
題目描述:
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
例子:
輸入: "pwwkew"
輸出: 3
解釋: 因爲無重複字符的最長子串是 "wke",所以其長度爲 3。
請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串
題目分析:
- 簡單的方法是遍歷整個字符串,因爲是子串,所以追蹤子串的起點和重點。遍歷到新的字符時,檢查是否已經在起點和終點的範圍內出現,如果出現就捨棄掉起點到這個出現的位置的數據,起點重新標示爲發現的位置加一,終點位置也加一,同時判斷起點和終點的距離是否大於最大值
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