leetcode 003
阿新 • • 發佈:2018-09-29
ref bstr bcb value ng- wke 切片 block lin
3. Longest Substring Repeating Character
Difficulty:Medium
The link:
- https://leetcode.com/problems/longest-substring-without-repeating-characters/
Description :
Given a string, find the length of the longest substring without repeating character. Example 1: Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3. Example 2: Input: "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1. Example 3: Input: "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
Solutions:
Solution A:
(* 為解決) 想實現KMP算法 KMP 介紹
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ look_up = {} for i in range(len(s)): if s[i] not in look_up: look_up[s[i]] = i else: # l 現在字典的長度 l = len(look_up) # m 出現重復字母位置 m = look_up[s[i]] # str01 字符串切片 str01 = s[m:l] for i, item in enumerate(str01): if s[i] not in look_up: i = m + l l = l + 1 return l
Solution B:
dict,get() The method get() returns a value for the given key. If key is not available then returns default value None.
dict.get(key, default = None)
- key - This is the Key to be searched in the dictionary.
- default - This is the Value to be returned in case key does not exist.
class Solution: def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ l, start, n = 0, 0, len(s) maps = {} for i in range(n): start = max(start, maps.get(s[i], -1)+1) l = max(l, i - start+1) maps[s[i]] = i return l
leetcode 003