求最大公共子串的长度
例如 “abcabcbb”->3 “bbb”->1
思路:采用双指针,low,high。每次用high指向的元素在哈希表中查找上一次出现的位置,若该位置>=low,则说明在low到high之间已经存在该元素,那么令low为上一次出现位置+1,修改该元素最后出现的位置;若<low,说明low到high中没有该元素,将该元素入map,并计算最大长度。
int lengthOfLongestSubstring(string s)
{
if (s.empty()||s.length()==0)
return 0;
int low=0,high=0,int_max=0;
map<char,int> m;//用来存放每个元素最后出现的位置
for (; high < s.length(); ++high) {
if (m.find(s[high])==m.end())
{
m.insert(pair<char,int>(s[high],high));
int_max = max(int_max,high-low+1);
}
else
{
int lastIndex = m[s[high]];
if (lastIndex>=low)
{//说明正在访问的元素在low-high之间
low=lastIndex+1;
} else{
int_max = max(int_max,high-low+1);
}
m[s[high]]=high;
}
}
return int_max;
}