动规:f[i]表示以第i个字符结尾的最长无重复子串长度。
f[i]=min(len,f[i-1]+1)
其中len是上一个与s[i]相同的字符到i的距离,例如abca,i=3,s[i]='a',那么len=3-0=3,。
边界条件是n=0的情况。
public class Solution {
public int lengthOfLongestSubstring(String s) {int n=s.length();
if(n==0)
return 0;
int[] f=new int[n];
char[] ca=s.toCharArray();
f[0]=1;
int i,j,len,max=1;
for(i=1;i<n;i++)
{
for(j=i-1;j>=0;j--)
{
if(ca[j]==ca[i])
break;
}
len=i-j;
if(len>f[i-1]+1)
f[i]=f[i-1]+1;
else
f[i]=len;
if(f[i]>max)
max=f[i];
}
return max;
}
}