問題の説明
文字列から文字を繰り返さずに最も長い部分文字列を見つけ、最も長い部分文字列の長さを計算してください。
問題解決レポート
は
文字で終わる最長のサブストリングの長さ。
覚えて
開始位置は
シーク
:
- 逆走査 、
- 存在しない場合 、次に 、 は変更されません。
- 存在する場合 、次に その間、 更新されます 。
時間の複雑さ:
、最悪は
スペースの複雑さ:
実装コード
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;
}
};