3. 无重复字符的最长子串
题目链接
这道题看到无重复最先想到哈希表,能提交过但是时间有点多。注意到只求出长度就可以,可以采用滑动窗口(也可以理解为双指针的一种妙用)。
C++哈希表:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> set;
int left = 0;
int max_len = 0;
for(int i = 0; i < s.size(); i++)
{
while(set.find(s[i]) != set.end())
{
set.erase(s[left]);
left++;
}
max_len = max(max_len, i-left+1);
set.insert(s[i]);
}
return max_len;
}
};
C++滑动窗口:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0,right=0;
int maxlen=0;
while(right<s.length())
{
for(int i=left;i<right;i++)
{
if(s[i]==s[right])
{
left=i+1;
break;
}
}
maxlen=max(maxlen,right-left+1);
right++;
}
return maxlen;
}
};
python滑动窗口:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
left = 0
right = 0
ans = 0
while right < len(s):
for i in range(left, right):
if s[i] == s[right]:
left = i+1
break
ans = ans if (ans>right-left+1) else (right-left+1)
right+=1
return ans
如果对你有帮助,请点个赞哦!