https://leetcode.com/problems/longest-substring-without-repeating-characters/
description:
Given a string, find the length of the longest substring without repeating characters.
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.
- 方案一
func lengthOfLongestSubstring(s string) int {
var lastLongestLen, curLen int
bytes := []byte(s)
subStr := ""
for i, byte := range bytes {
if index := strings.Index(subStr, string(byte)); -1 != index {
curLen = len(subStr)
if curLen > lastLongestLen {
lastLongestLen = curLen
}
subStr = subStr[index+1:]
curLen = len(subStr)
}
subStr = subStr + string(bytes[i])
curLen++
}
if curLen > lastLongestLen {
return curLen
}
return lastLongestLen
}
- 方案二:
直接使用bytes试试,内存使用量下降了
func lengthOfLongestSubstring(s string) int {
var lastLongestLen, curLen int
bytes := []byte(s)
subBytes := []byte{}
for _, b := range bytes {
if index := indexOfEle(subBytes, b); -1 != index {
if curLen > lastLongestLen {
lastLongestLen = curLen
}
subBytes = subBytes[index+1:]
curLen = curLen - index - 1
}
subBytes = append(subBytes, b)
curLen++
}
if curLen > lastLongestLen {
return curLen
}
return lastLongestLen
}
func indexOfEle(in []byte, ele byte) int {
for i, b := range in {
if ele == b {
return i
}
}
return -1
}