至多包含两个不同字符的最长子串

杨杰_18b7 · · 499 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

func lengthOfLongestSubstringTwoDistinct(s string) int {
if len(s) <= 2 {
return len(s)
}
leftIdx, maxLen := 0, 0
charIdxMap := make(map[uint8]int)

for i:=0; i<len(s); i++ {
    // fmt.Println(" ---- ", i)
    c := s[i]
    if _, ok := charIdxMap[c]; !ok { //不存在
        if len(charIdxMap) >=2 {  // 达到2个,left需要滑动
            leftCh := s[leftIdx]
            leftIdx = charIdxMap[leftCh]
            if leftIdx < i - 1{
                leftIdx += 1
                delete(charIdxMap, leftCh)
            }else { // leftIdx == i-1
                for k, idx := range charIdxMap {
                    if k != leftCh {
                        if leftIdx > idx + 1 {
                            leftIdx = idx + 1
                        }
                        delete(charIdxMap, k)
                    }
                }
            }
        }
    }

    // update
    charIdxMap[c] = i
    if i-leftIdx+1 > maxLen {
        maxLen = i-leftIdx+1
    }
    // fmt.Println(leftIdx, charIdxMap, s[leftIdx:i+1],maxLen)
}
return maxLen

}

作者:lambda01
链接:https://leetcode-cn.com/problems/longest-substring-with-at-most-two-distinct-characters/solution/golang-by-lambda01/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:杨杰_18b7

查看原文:至多包含两个不同字符的最长子串

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

499 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传