zoukankan      html  css  js  c++  java
  • leetcode 3. Longest Substring Without Repeating Characters

    用unordered_map存储字符和字符对应的索引。

    left是上一个重复字符的位置索引,初始为-1,因为最开始没有重复字符,如果初始为0,就表示第0个位置重复了,显然不符合题意。同时你也可以用i-left计算发现,如果前面没有重复,你的left初始化为0,计算就少1了。

    注意:if判断中要m[s[i]] > left,也就是说如果map中存储的对应索引小于left,就可以不更新left

    比如a、b、b、a这种情况,如果没有m[s[i]] > left,输出的结果是3,这个时候i是3,left是0.因为unordered_map并没有删除之前的a,所以在最后一个a的时候会报错

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            if(s.size() <= 0)
                return 0;
            unordered_map<char,int> m;
            int left = -1,res = 0;
            for(int i = 0;i < s.size();i++){
                if(m.find(s[i]) != m.end() && m[s[i]] > left)
                    left = m[s[i]];
                m[s[i]] = i;
                res = max(res,i - left);
            }
            return res;
        }
    };

    https://www.cnblogs.com/grandyang/p/4480780.html

    unordered_mapmap类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,存储时是根据keyhash值判断元素是否相同,即unordered_map内部元素是无序的。unordered_mapkey需要定义hash_value函数并且重载operator==

  • 相关阅读:
    java_监控工具jvisualvm
    bzoj3667: Rabin-Miller算法
    bzoj3677: [Apio2014]连珠线
    4070: [Apio2015]雅加达的摩天楼
    4069: [Apio2015]巴厘岛的雕塑
    4071: [Apio2015]巴邻旁之桥
    bzoj2653: middle
    1500: [NOI2005]维修数列
    bzoj4262: Sum
    bzoj4540: [Hnoi2016]序列
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9657652.html
Copyright © 2011-2022 走看看