Example 1:
Input: s = “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: s = “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: s = “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Notice that the answer must be a substring, “pwke” is a subsequence and not a substring.
class Solution {
public:
int lengthOfLongestSubstring(string s) {
string subs=s;
int len=0;
int k=0;//起始位置(相对于s)
int max=0;
int sum=0;//减去长度总和
int flag=0;//是否第一次重复;
for(int i=0;i<s.size();i++)
{
int pos=subs.find(s[i]);
len++;
if((pos+sum)!=i)
{
len=i-k;
if(len>max)
max=len;
subs=subs.substr(pos+1,(subs.size()-pos));
sum+=pos+1;
// printf("%d#%d#%d#%d",i,pos,k,len);
k+=sum;
// cout<<"#"<<subs;
if(flag==1)
len=i-sum+1;//减去之后的长度
else
len=i-pos;
flag=1;
// cout<<"#"<<len<<"#"<<sum<<endl;
}
if(len>max)
max=len;
}
return max;
}
};
该博客讨论了一个算法问题,即如何找到给定字符串中最长的无重复字符的子串。提供的C++代码实现了一个解决方案,通过维护一个滑动窗口来跟踪已出现的字符及其位置,以找到最长的不重复子串。
972

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



