力扣3、无重复字符的最长子串


思路

  • 由于是字符串。故可以建立数组哈希表hash[128];
  • 从头遍历字符串计算每个无重复子串的长度,顺便更新最长子串长度
  • hash[val] = key; key表示val出现的位置
  • 对于重复重现的val更新它出现的位置,并更新count
  • 看代码注释

代码演示




int lengthOfLongestSubstring(char * s){
// start每个表示子串头的位置
    int hash[128] = {0}, i, count = 0, start = 0, max = -0x3f3f3f3f;
    for (i = 0; s[i]; i++) {
        if (hash[s[i]] > start) { //hash[s[i]] > start表示s[i]出现过了
            count = i - start; //计算当前子串长度
            max = count > max ? count : max;
            start = hash[s[i]]; //更新 新的子串头的位置
        }
        hash[s[i]] = i + 1; //更新重复字符出现位置
    }
    count = i - start; //计算最后不重复子串长度
    return count > max ? count : max;
    
}

文章作者: Axieyun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Axieyun !
评论
评论
  目录