zoukankan      html  css  js  c++  java
  • leetcode-最长无重复字符的子串

    参考他的人代码:https://blog.csdn.net/littlebai07/article/details/79100081

    给定一个字符串,找出不含有重复字符的最长子串的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3 
    解释: 无重复字符的最长子串是 "abc",其长度为 3。
    

    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 无重复字符的最长子串是 "b",其长度为 1。
    

    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 无重复字符的最长子串是 "wke",其长度为 3。
         请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。

                距离abcabcbb
    思路:遍历字符串,从一个字符到最后一个字符。如果字符不存在,则加入Map中,temp长度增加。
    i表示当前所在位置,i-temp表示map中字符串的初始位置。
    如果该字符已经在map中存在,则分两种情况处理:1.当前遍历的字符的位置在i-temp的范围内,那么
    将temp截断。也就是重新在i+1的位置开始遍历字符串的。比如abca,temp=当前位置(4)减去第一个a的位置(1),也就是从第二个a开始
    遍历字符串。
    2.如果当前遍历的字符串不在i-temp的范围内,temp++,同时立即更新该字符串在map中的位置,比如abdacbeg,从第二个a开始重新遍历,
    遇到第二个b,由于第一个b的字符不在i-temp的范围内,因此temp+1,同时更新b的map。
    字符串Maptemp
    a—-bcabcbb {a:0} 1
    ab—-cabcbb {a:0,b:1} 2
    abc—-abcbb {a:0,b:1,c:2} 3
    abca—-bcbb {a:3,b:1,c:2} 3
    abcab—-cbb {a:3,b:4,c:2} 3
    abcabc—-bb {a:3,b:4,c:5} 3
    abcabcb—-b {a:3,b:6,c:5} 2
    abcabcbb {a:3,b:7,c:5} 1

    代码如下:

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            char [] c=s.toCharArray();
            int len=s.length();
           Map<Character,Integer> map=new HashMap();
            int max=Integer.MIN_VALUE;
            int temp=0;
            for(int i=0;i<len;i++){
                if(map.containsKey(c[i])){
                    if(map.get(c[i])+temp<i){ // 列举到第二个C的时候,此时temp截断,从c开始计算位置,i-temp表示起始位置
                        temp++;
                    }else{
                        max=Math.max(temp,max);   
                        temp=i-map.get(c[i]);
                    }
                    map.put(c[i],i);
                }else {
                    map.put(c[i],i);
                    temp++;
                }
            }
            max=Math.max(max,temp);
            return max;
        }
    }

    如果有不理解的地方,希望读者可以自己举例,或者通过Java中的Debug,可以清晰地了解字符串遍历的过程。

  • 相关阅读:
    PHP 大小写转换、首字母大写、每个单词首字母大写转换相关函数
    【论文学习4】BiSample: Bidirectional Sampling for Handling Missing Data with Local Differential Privacy
    【论文学习3】Local Differential Privacy for Deep Learning
    【论文学习2】 Differential Privacy Reinforcement Learning
    深度学习中的优化算法
    Spatial crowdsourcing
    “pip install tensorflow ”出现错误
    python或pip'不是内部或外部命令”
    pip install torch出现错误
    打不开gitHub的解决方法
  • 原文地址:https://www.cnblogs.com/patatoforsyj/p/9505692.html
Copyright © 2011-2022 走看看