无重复字符的最长子串 leetcode 3 C++ 滑动窗口
C++ 版本的滑动窗口解决方案
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.empty()) return 0;
unordered_map<char,int> sub_map;
int left=0;
int right = 0;
int max_len = 1;
while(right < s.size()){
// 如果在已经存在的字符中找到该字符,更新该字符的新位置,并且计算在此之前的不重复子串的长度,进行取极大值。 if(sub_map.find(s[right])!=sub_map.end()) {
if(sub_map[s[right]]>= left){
max_len = max_len > (right - left) ? max_len : right - left;
left = sub_map.at(s[right])+1;
}else{
}
}
sub_map[s[right]] = right;
right++;
}
max_len = max_len > (right -left ) ? max_len:right-left;
return max_len;
}
};
//C语言版本 ,不使用unordered_map ,因为是普通字符串,可以将字符当成数组下标存储起来 ,使用C语言,双指针的滑动窗口 版本
int lengthOfLongestSubstring(char * s){
if(!*s) return 0;
int sub_char[256] = {0};
int left = 0;
int right = 0;
int max_len = 0;
char *p = s;
while(*p){
if(sub_char[*p]){
if(sub_char[*p] -1 >= left){
// 目前的子序列已经重复了
max_len = max_len > right-left? max_len : right-left ;
left = sub_char[*p];
}
}
sub_char[*p] = right+1;
p++;
right++;
}
max_len = max_len>right-left ? max_len:right-left;
return max_len;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现