码迷,mamicode.com
首页 > 编程语言 > 详细

【Leetcode】【Longest Substring Without Repeating Characters】【无重复字符的最长子串】【C++】

时间:2018-06-08 22:37:27      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:for循环   for   说明   out   pos   IV   字符   code   return   

  • 题目:给定一字符串,求其无重复字符的最长子串长度。
  • 思路:for循环一次,时间复杂度为O(N)。字符的ascii值为32~126。start表示当前无重复字符子串的初始位置,初始值为0;可定义一个位置数组pos[128]表示for循环索引到当前位置时相应的字符对应的位置。若当前字符s[i](其ascii值为cur_pos),若pos[cur_pos]>=start,说明在start之后已有该字符s[i],则以start开始的子串第一次遇到重复字符,打住。判断当前长度是否大于max_len,若大于则更新max_len。然后更新start,以及pos[cur_pos]...。注意最后一个字符的处理。
  • 代码:
    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            int len_s=s.size();
            const int M=128;
            int pos[M];
            for(int i=0;i<M;i++)
                pos[i]=-1;
    
            int start=0;
            int max_len=0;
    
            for(int i=0;i<len_s;i++)
            {
                int cur_pos=s[i];
                if(pos[cur_pos]>=start)
                {
                    if(max_len<(i-start))
                    {
                        max_len=i-start;
                    }
                    start=pos[cur_pos]+1;
                }
                pos[cur_pos]=i;
            }
            if((len_s-start)>max_len)
                max_len=len_s-start;
            return max_len;
        }
    };

     

【Leetcode】【Longest Substring Without Repeating Characters】【无重复字符的最长子串】【C++】

标签:for循环   for   说明   out   pos   IV   字符   code   return   

原文地址:https://www.cnblogs.com/dreamer123/p/9157761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!