题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
案例1
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
案例2
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
案例3
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是“子串”的长度,"pwke" 是一个子序列,不是子串。
思路
- 循环扫描字符串每个字符,通过map记录每个字符及字符所在的位置
- 记录最开始的索引(index)位置,如果出现重复的字符则重置索引位置
- 使用局部变量(maxLen)保存当前最大长度
代码
func lengthOfLongestSubstring(s string) int {
maxLen := 0
data := map[rune]int{}
// 索引位置
index := 0
for key, value := range s {
// 校验是否存在过
if item, ok := data[value]; ok {
// 替换索引
if item > index {
index = item
}
}
if key+1-index > maxLen {
maxLen = key + 1 - index
}
data[value] = key + 1
log.Printf("value:%d, index:%d\n", value, key+1)
}
return maxLen
}
参考
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/lo…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。