leetcode Longest Substring Without Repeating Characters

来源:互联网 发布:lol解封软件 编辑:程序博客网 时间:2024/05/23 11:18

string问题,这个题可以用数组,hashmap,set来做,其中时间复杂度还是数组最小,但是有个问题,这道题只有小写字母所以设一个长度为26的数组就可以了,bool char[26]来表示每个字母在最长不重复子字符串中是否出现了

思路:

1,设定两个指针,一个left,一个right,他们之间s[l]~s[r]表示没有重复的部分,也就是说:如果这部分中没重复的是abcde的话,用数组表示,则char[0]~char[4]为true,这个思路

2,这里用set这个容器,他的好处是,set是由平衡二叉树这种数据结构而来,他的自带函数find,搜索效率为Logn,比较方便,这点比vector要好

class Solution {public:    int lengthOfLongestSubstring(string s) {        if(s == "") return 0;        int maxn;        set<char> cset;        int l = 0,r = 0;        while(r < s.size()){            if(cset.find(s[r]) == cset.end())                cset.insert(s[r]);            else {                maxn = (maxn>r-l)?maxn:(r-l);                while(s[l]!=s[r]){                    cset.erase(s[l++]);                }                l++;            }            r++;        }        maxn = (maxn>r-l)?maxn:(r-l);        return maxn;    }};


0 0
原创粉丝点击