难度:中等
题目
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
s.length <= 40000
解答
思路
从左到右搜索,当发现重复值,则保存最大值,并将左边起始位置移动到不重复的位置,继续搜索。
知识点
find
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int leftPosition = 0;
int maxLength=0;
for(int i=0;i<s.size();i++)
{
auto position = find(s.begin()+leftPosition,s.begin()+i,s[i]);
if(position!=s.begin()+i)
{
maxLength=maxLength>i-leftPosition?maxLength:i-leftPosition;
leftPosition=position-s.begin()+1;
}
}
maxLength=maxLength>s.size()-leftPosition?maxLength:s.size()-leftPosition;
return maxLength;
}
};