最大不具有重复字符的子串

longest-substring-without-repeating-characters

http://www.nowcoder.com/questionTerminal/5947ddcc17cb4f09909efa7342780048

借助map辅助,用map记录每一个字符的最大的下标,用left记录没有重复字符子串的起始位置,空间复杂度和时间复杂度均为O(n)。

class Solution {
public:
    /**
     *
     * @param s string字符串
     * @return int整型
     */
    int lengthOfLongestSubstring(string s) {
        // write code here
        int size = s.size();
        if (size < 1) return 0;
        unordered_map<char, int> um;
        int maxLen = 0, left = 0;       // left记录上一个没有重复的位置
        for (int i = 0; i < size; ++i) {
            if (um.find(s[i]) != um.end()) {    // 如果在map里
                left = max(left, um[s[i]] + 1);
            }
            maxLen = max(maxLen, i - left + 1);
            um[s[i]] = i;
        }
        return maxLen;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

在喝茶的杨桃很郁闷:我简单喵两句: 1.如果不是实在没东西写不要写熟悉async await这些语法层面的东西 2.也不要写熟悉HTTP,因为http内容很多,稍微深挖一点你不会的话会让人有一种“原来你简历上面的东西都没有完全掌握”的感觉,容易给自己挖坑 3.自我评价可以删了 4.我在复习明天的面试,先mark,后面再回来继续建议
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务