3. Longest Substring Without Repeating Characters

这是一道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;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容