zoukankan      html  css  js  c++  java
  • 最长不重复子序列

    思路,找相同元素之前出现的位置,如果不存在,那么dp[j]=dp[j-1]+1

    如果相同的元素存在,且不在dp[j-1]的那个长度内,那么dp[j]=dp[j-1]+1

    否则,说明这个元素重复了,那就只能等于j-1,例子就是1,2,2,1,3,1里面的2,1,3,1;2,1,3是dp[j-1],然后1重复了,那么最后这个1的dp[j]=j-i

    https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/

    import java.util.HashMap;
    import java.util.Map;
    
    class Solution {
        public int lengthOfLongestSubstring(String s) {
            if(s == null || s.length() == 0){
                return 0;
            }
            Map<Character,Integer> index = new HashMap<>();
            int max = 1 ;
            int before = 1;//dp[j-1]
            index.put(s.charAt(0),0);
            for(int i=1; i<s.length(); i++){
                if(index.containsKey(s.charAt(i))) {
                    int sameCharIndex = index.get(s.charAt(i)) ;
                    if(before < (i-sameCharIndex)) {
                        before = before+1;//说明相同的元素不在j-1的这个范围内,那么dp[j]=dp[j-1]+1
                    } else {
                        before = i-sameCharIndex;//相同元素在j-1的范围内,那么before就是j-i
                    }
                    max = Math.max(max,before);
                } else {
                    before = before+1;//相同元素之前未出现,那么dp[j]= dp[j-1]+1
                    max = Math.max(max, before);
                }
                index.put(s.charAt(i),i);
            }
            return max;
        }
    }
    

      

  • 相关阅读:
    普通平衡树(treap与splay模板)
    NOIP2009T4 靶形数独
    单调队列模板
    NOIP2010引水入城
    数差
    NOIP2016DAY2T1 组合数问题
    NOIP2016 D2T3 愤怒的小鸟
    NOIP双栈排序
    膜拜
    斐波那契数列
  • 原文地址:https://www.cnblogs.com/iamzhoug37/p/12970095.html
Copyright © 2011-2022 走看看