[leetcode]No.3无重复字符的最长子串-创新互联

题目

给定一个字符串 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元起,快前往官网查看详情吧


本文题目:[leetcode]No.3无重复字符的最长子串-创新互联
分享地址:http://pwwzsj.com/article/ioege.html