Leetcode 第3题

int lengthOfLongestSubstring(string s) {
        vector pos(256,-1);
        int left=-1,res=0;
        for(int i=0;i left)
                left=pos[s[i]];
            if(i-left>res)res=i-left;
            pos[s[i]]=i;
        }
        return res;
    }

原本的想法是将s遍历,若s[i]与前面的字符不相等则res++,若相等则将相等位置的下一个记为start并重置res,这样的复杂度是O(n2),这个方法是将第二个循环的过程通过一个数组pos完成,将每个包含的字符的位置记录在数组中,若再次访问到pos[s[i]]则说明s[i]字符重复出现,这样进行操作可以省去一个循环。

你可能感兴趣的:(Leetcode)