暴力
int lengthOfLongestSubstring(char * s){
int len=strlen(s);
if(len==0)
return 0;
int dp[len];
dp[0]=1;
int maxlen=1;
int j;
for(int i=1;i<len;i++)
{
for(j=i-1;j>=i-dp[i-1];j--)
{
if(s[j]==s[i])
{
dp[i]=i-j;
break;
}
}
if(j<i-dp[i-1])
{
dp[i]=dp[i-1]+1;
}
printf("dp[%d]=%d\n",i,dp[i]);
if(maxlen<dp[i])
maxlen=dp[i];
}
return maxlen;
}
滑动窗口
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> st;
int len=s.size();
int rk=-1,ans=0;
for(int i=0;i<len;i++)
{
if(i>0)
st.erase(s[i-1]);
while(rk+1<len&&!st.count(s[rk+1]))
{
st.insert(s[rk+1]);
rk++;
}
if(rk-i+1>ans)
ans=rk-i+1;
}
return ans;
}
};