zoukankan      html  css  js  c++  java
  • LeetCode_3_Longest Substring Without Repeating Characters

    3. Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

     

    题目分析:

        给定一个字符串,找出最长的不包含重复字符的子串的长度。

       

        假定该满足不包含重复字符条件的子串为s1, 则s1 只有两种情况:

    1、 s1 存在于两个重复字符之间。

    2、 s1 为 [s[i], s[s.size()-1]]区间上的无重复字符构成。

     

    可通过固定子串头结点,并从头结点向后依次扫描的方法获取所有的s1,当扫描到重复字符’x’时, 判断上一次出现’x’的位置是否在头结点之后,若是则更新正头结点为上一次出现’x’的后一个结点,直至扫描至字符串结尾。并对所有s1 进行比较获取最长子串。

     

    Solution

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            vector<int> vDct(128, -1);// ASCII共包含128个字符,vDct['x'] 表示 'x' 在s第一次出现的位置下标
            int maxLen = 0;
            int istart = -1;
            for(int i = 0; i < s.size(); i++)
            {
                if(vDct[s[i]] > istart)
                    istart = vDct[s[i]];
                vDct[s[i]] = i;
                maxLen = max(maxLen, i - istart);
            }
            return maxLen;
        }
    };

    T(n) = O(n);

    S(n) = O(1); 

    PS: 刚开始做这题时,并没有想到这种思路,而是采用了 暴力破解法=_=|。  

    Time Limit Exceeded...

    And then,thanks for Internet, Baidu, Google....

    当下即永恒
  • 相关阅读:
    七-八章学习笔记
    Linux基础学习截图
    20191221第十章读书笔记
    第九章读书笔记
    20191221读书笔记
    缓冲区溢出
    团队作业(二):需求分析
    2019-2020-1 20191319 《信息安全专业导论》第十二周学习总结
    2019-2020-1 20191319 《信息安全专业导论》第十一周学习总结
    2019-2020-1 20191319 《信息安全专业导论》第十周学习总结
  • 原文地址:https://www.cnblogs.com/HellcNQB/p/5371083.html
Copyright © 2011-2022 走看看