這是一道DP題,使用DP[i]來表示以I為結尾的子串的最大長度。轉移關系式式
DP[i+1]=Math.min(DP[i]+1,i-j),j是距離I+1最近的相同結點的位置。由于DP[i+1]只由前一個狀態決定,上面的表達式可以寫成迭代的形式。
class Solution {
public int lengthOfLongestSubstring(String s) {
HashMap<Character,Integer> map = new HashMap<>();
if(s==null||s.length()==0) return 0;
int max = 0;
int j =0 ;
for(int i = 0 ;i<s.length();i++)
{
char ch = s.charAt(i);
if(map.containsKey(ch))
{
int start = map.get(ch);
j = Math.min(j+1,i-start);
}
else
{
j++;
}
max=Math.max(j,max);
map.put(ch,i);
}
return max;
}
}