3.無重複字符的最長子串

一、思路:

(1)暴力法:遍歷所有的字串,統計不含有重複字符的字串的最大長度

(2)滑動窗口法:選取(i,j]範圍的元素,查看窗口右邊的元素,如果元素不在窗口內,j向右移動一個;如果右邊的元素在窗口中已經有了重複的值,把i移動到那個重複的值的地方。

二、代碼(C++):

int lengthOfLongestSubstring(string s) {
       if(s.size()==0)    //排除空字符串情況
            return 0;
        unordered_map<char,int> m;    //用一個unordered_map存放元素
        int max_length=1;    //初始最大長度爲1
        int i=-1;    //初始窗口左端值i爲-1
        for(int j=0;j!=s.size();j++)
        {
            if(m.find(s[j])!=m.end())    //元素已經存在在unordered_map,進一步判斷,如果m[s[j]]>i則元素在窗口中已經存在
                i=max(i,m[s[j]]);    //窗口左端移動到已存在的元素處
            max_length=max(max_length,j-i);    //最大長度等於窗口右端-左端
            m[s[j]]=j;    //將元素放入unordered_map
        }
        return max_length;    //返回最大值
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章