问题描述
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
解题报告
表示以第
个字符结尾的最长子字符串的长度。
记
的起始位置为
求
时:
- 逆序遍历 ,
- 如果不存在 ,则 , 保持不变;
- 如果存在 ,则 ,同时将 更新为 。
时间复杂度:最好为
,最差为
空间复杂度:
实现代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n=s.size(),ans=1,flag=0,i,j,p=0;
if(n==0) return 0;
vector<int>dp(n,1);
for(i=1;i<n;i++){
for(j=i-1;j>=p;j--){
if(s[i]==s[j]){
flag=1;
break;
}
}
if(!flag)
dp[i]=dp[i-1]+1;
else{
dp[i]=i-j;
p=j;
flag=0;
}
ans=max(ans,dp[i]);
}
return ans;
}
};