无重复字符的最长子串
要求:给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
这题主要使用到了滑动窗口的方法,使用的到无序集的容器类型;
C++ 解法:
int LengthOfLongestSubstring(string s)
{
//充当窗口的无序集
unordered_set<char> g_csetTemp;
//记录窗口最右边元素在字符串中的下标
int g_iIndex = 0;
//最长子串的长度
int g_iMax = 0;
//将所有元素放入窗口中
for (int i = 0; i < s.size(); i++)
{
//窗口中如果有重复元素,将最早加入(窗口最左边)的重复元素删除
while (g_csetTemp.find(s[i]) != g_csetTemp.end())
{
//删除操作
g_csetTemp.erase(s[g_iIndex]);
g_iIndex = g_iIndex + 1;
}
//将新的元素的插入无序表
g_csetTemp.insert(s[i]);
//获得子串最大长度
if (g_csetTemp.size() > g_iMax)
{
g_iMax = g_csetTemp.size();
}
}
return g_iMax;
}