leetcode:3. 无重复字符的最长子串

一、题目

二、函数原型

int lengthOfLongestSubstring(char* s)

三、思路

本题就是找最长的无重复字符子串。

两层循环,外层循环控制字串的起始位置,内层循环控制字串的长度。

设置一个长度为256且初始为0的hash表(因为一共有256个字符),可以判断是否有重复字符:遍历遇到某字符,其对应位置的hash值++,因此可以判断该字符是否重复出现过。

若遇到重复出现的字符,则跳出内层循环,重置hash表,并记录该次循环出现的最大无重复字符字串长度。

外层循环结束后,返回最大无重复子串长度即可。

四、代码

cpp 复制代码
int lengthOfLongestSubstring(char* s) {
    int* hash = (int*)calloc(256, sizeof(int));//hash表,初始为0
    int len = strlen(s);
    int ans = 0;//最终结果,即最大的无重复字符字串长度
    int max = 0;//每次内层循环的最大无重复字符字串长度
    
    for (int j = 0; j < len; j++)//控制字串起始位置
    {
        for (int i = j; i < len; i++)//控制子串长度
        {
            if (hash[s[i]] > 0)//该字符出现过
            {
                break;
            }
            else
            {
                hash[s[i]]++;
                max++;
            }
        }
        ans = (int)fmax(ans, max);//取较大的无重复字符子串长度
        memset(hash, 0, sizeof(int) * 256);//重置hash表
        max = 0;//重置无重复字符子串长度
    }
    return ans;
}
相关推荐
Jerry17 分钟前
LeetCode 347. 前 K 个高频元素
算法
Young Doro1 小时前
SAC 算法
线性代数·算法·机器学习
罗超驿1 小时前
2.算法效率的核心密码:时间复杂度和空间复杂度详解
java·数据结构·算法
:-)1 小时前
算法-堆排序
数据结构·算法·排序算法
星马梦缘2 小时前
算法设计 期末复习笔记
算法·动态规划·二分图·最小生成树·线性规划·最大流
鱼儿也有烦恼2 小时前
快速学完 LeetCode top 1~50
leetcode·algorithm
鱼儿也有烦恼3 小时前
题型归纳与重要模版
算法
菜鸟不爱学3 小时前
第P4周:猴痘病识别
算法
QN1幻化引擎4 小时前
我写了一个「有八层意识结构」的 Python 认知引擎,它没有用任何 LLM
人工智能·算法·架构
Keven_115 小时前
算法札记:如何卡SPFA
算法·spfa