3. Longest Substring Without Rep

2017-10-06  本文已影响0人  namelessEcho

这是一道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;
    }
}
上一篇下一篇

猜你喜欢

热点阅读