题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
解题方法1:滑动窗口
解题思路:设置前后两个指向性符号start和end并令其初始值为0,设length为无重复字符串的长度并设初始值为零,设result为无重复字符串的最大长度并设初始值为零。利用for循环取得无重复字符串的长度,一旦出现重复则跳出循环并重新记录新的无重复字符串长度,并利用max取得最大值赋给result。
解题算法:
class Solution {
public: int lengthOfLongestSubstring(string s) {
int start(0),end(0),length(0),result(0);
int sl=int(s.size());
while(end<sl)
{
char tmp=s[end];
for(int index=start;index<end;index++)
{
if(tmp==s[index])
{
start=index+1;
length=end-start;
break;
}
}
end++;
length++;
result=max(result,length);
}
return result;
}
};
结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407203808684.PNG)
解题方法2:结合哈希表
解题代码:
class Solution {public:
int lengthOfLongestSubstring(string s) {
vector<int> table(128,-1);
int left=-1,right,maxl=0;
for(right=0;right<s.size();right++)
{
if(table[s[right]]==-1||left>table[s[right]])
{table[s[right]]=right;}
else
{
maxl=max(maxl,right-left-1);
left=table[s[right]];
table[s[right]]=right;
}
}
return max(maxl,right-left-1);
}
};
结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407205706520.PNG)