一、思路:
(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; //返回最大值
}