• 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==

  • 相关阅读:
    逆序数———线段树/树状数组
    线段树 模板
    博弈论--对称博弈
    matlab程序设计
    matlab矩阵的操作
    2nd 历年学生作品评论(3部)
    1st 四人小组项目
    1st 本周工作量及进度统计
    1st 结对编程:简易四则运算
    1st 英文文章词频统计
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9657652.html
Copyright © 2020-2023  润新知