坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day7
无重复字符的最长子串
- 题目描述 
- 解题思路 
  - 不含重复字符——》考虑使用哈希表来存储记录
- 为了提高效率也可以用数组,hash := [128]bool{} (因为存的是字符的ASCLL码,所以开128大小即可),布尔值用于存储当前右端点是否重复
- 核心思想:遍历右端点,固定右端点,滑动左端点,保证左边绝对没有跟右端点重复的字符(即以右端点为准),有的话就滑动左端点去重复
- 总的来说,右端点负责扩张长度,左端点负责控制去重,遍历完之后记录下来整个过程中最长的子串长度即可
 
- 代码参考
func lengthOfLongestSubstring(s string) int {
    hash := [128]bool{}
    left := 0
    ans := 0
    for right,value := range s{
        for hash[value]{
            hash[s[left]] =false
            left++
        }
        hash[value] = true
        ans = max(ans, right-left+1)
    }
    return ans
}
- tips(好精妙的一道题) 
  - hash := [128]bool{}可以开一个类似于哈希表功能的数组,因为可以存字符的ASCLL码所以设置为128,bool值代表当前值是否有重复的情况(false代表当前没有重复的情况)
- 更新方式为:遍历右端点,每次设置hash[value] = true,即每次遍历的时候都把右端点的值记录进去
- 子串长度的计算公式为:right-left+1
 



















