zoukankan      html  css  js  c++  java
  • leetcode 3 无重复字符的最长子串

     

    O(n)time,O(n)space

    /*****
    动态规划?
    维护一个window(i,j)表示i到当前元素j为0~j且包含j元素的最长子串下标(用下标避免不断的插入删除)
    维护一个哈希表为当前元素是否出现在当前最长子串中unordered_map<char,insubstr> insubstr用1和0表示;
    dp[i]为0~j且包含j元素的最长子串长度(可以直接压缩为一个cur_l变量降低空间复杂度)
    ***/
    
    
    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            
            int ls=s.length();
            if(ls<=1) return s.size();
            
            int res=0;
            unordered_map<char,int>m;
            int left=-1;//left为当前window左边界的前一位
            for(int i=0;i<ls;i++){
                char c=s[i];
                //在left到i(即(left,i])之间c有出现过
                if(m.count(c)&&left<m[c] )left=m[c];
                m[c]=i;
                int cur=i-left;
                res=res>cur?res:cur;
            }
            
            return res;
            
        }
    };
  • 相关阅读:
    二分专题
    数据结构-图
    Linux文件基本属性(以ls -l输出为例解释)
    shell脚本版素数筛
    Linux whereis,which
    Linux外网代理配置
    Linux三剑客
    Elasticsearch集群搭建(Linux)
    测试之路
    我的另一半
  • 原文地址:https://www.cnblogs.com/joelwang/p/10913437.html
Copyright © 2011-2022 走看看