给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
创新互联建站网站建设公司,提供成都网站建设、成都网站制作,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
输入输出样例示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
题解先上代码,本题采用C++语言编写,涉及的内容主要有:unordered_set(hash集合),多循环判断。
int lengthOfLongestSubstring(string s) {
int i = 0,j = 0,temp=0;
//循环所需变量以及求大值时所需的temp交换变量
while(i!=s.size()){
unordered_setocc;
//设置s.size次循环,在每个循环中定义一次hash集合
int num = 0;
//num变量用于记录子串长度
for(j=i;j0){
break;
}
//判断hash集合中的该元素个数,大于零意味着重复,跳出循环
occ.insert(s[j]);
//将元素添加到hash集合中
num++;
}
i++;
if(num>temp){
temp=num;
}
//判断与交换变量大小来求大值
}
return temp;
}
分析主要思路:主体两次循环。第一个循环是num的次数,num的次数应为子串的可能出现的长度,例如s="abcd",子串可能的长度为1、2、3、4,故num为4;第二个循环是遍历字符串,并将元素添加到hash集合中。
时间复杂度:O()
总结本人是编程小白,还未系统的学习过算法,代码还有很大改进的空间,欢迎大家批评与建议,但是我觉得对于像我一样的编程小白来说,还是很通俗易懂的,希望能有所帮助!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧