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;
}
相关推荐
Free Tester3 分钟前
如何判断 LeakCanary 报告的严重程度
java·jvm·算法
zyq99101_135 分钟前
DFS算法实战:经典例题代码解析
python·算法·蓝桥杯·深度优先
智者知已应修善业40 分钟前
【51单片机单按键切换广告屏】2023-5-17
c++·经验分享·笔记·算法·51单片机
广州灵眸科技有限公司42 分钟前
为RK3588注入澎湃算力:RK1820 AI加速卡完整适配与评测指南
linux·网络·人工智能·物联网·算法
qinian_ztc1 小时前
frida 14.2.18 安装报错解决
算法·leetcode·职场和发展
AI应用实战 | RE1 小时前
012、检索器(Retrievers)核心:从向量库中智能查找信息
人工智能·算法·机器学习·langchain
凤年徐1 小时前
C++手撕红黑树:从0到200行,拿下STL map底层核心
c++·后端·算法
Thomas.Sir1 小时前
AI 医疗之罕见病/疑难病辅助诊断系统从算法到实现【表型驱动与知识图谱推理】
人工智能·算法·ai·知识图谱
tankeven1 小时前
动态规划专题(03):区间动态规划从原理到实践(未完待续)
c++·算法·动态规划
田梓燊2 小时前
2026/4/11 leetcode 3741
数据结构·算法·leetcode