Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb", the answer is "abc",
which the length is 3.
Given "bbbbb", the answer is "b",
with the length of 1.
Given "pwwkew", the answer is "wke",
with the length of 3. Note that the answer must be a substring, "pwke" is
a subsequence and not a substring.
O(n)时间复杂度,窗口滑动解决,遍历字符串,打访问标记,记录最大长度,如果有访问过(v),则从窗口左边开始寻找重复访问过的字符,
找到后,该重复字符之前的字符设置为未访问过(关键),新窗口左边从该重复字符串下一位开始,右边从(v)的下一位开始,重新寻找最大长度不重
复字符子串。
int lengthOfLongestSubstring(string s) {
int maxlen,tmplen;
maxlen=tmplen=0;
int i,j;
i=j=0;
bool set[128]={false};
while(j<s.size()){
if(set[s[j]]==false){
set[s[j]]=true;
j++;
}
else{
while(s[i]!=s[j]){
set[s[i]]=false;
i++;
}
i++;
j++;
}
tmplen=j-i;
maxlen=tmplen>maxlen?tmplen:maxlen;
}
return maxlen;
}
本文介绍了一种在O(n)时间复杂度内找出给定字符串中最长无重复字符子串长度的算法。通过滑动窗口的方式遍历字符串,利用布尔数组记录字符是否被访问过,并在遇到重复字符时调整窗口位置。
336

被折叠的 条评论
为什么被折叠?



