zoukankan      html  css  js  c++  java
  • LeetCode 3. Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters.

    Examples:

    Given "abcabcbb", the answer is "abc", which the length is 3.

    Given "bbbbb", the answer is "b", with the length of 1.

    Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.


    【题目分析】

    给定一个字符串,求出其包含的最长的子串的长度。


    【思路】

    我们设置一个数组来记录以当前字符串结尾的子串的长度,然后遍历数组找出最长的子串即可。那么如果来计算以每一个字符串结尾的子串的长度呢?

    以"abcabcbb"为例:

    1. 初始时以每一个字符串结尾的子串的长度设置为0

    2. 构造一个Map用来保存已经遍历到的字符,初始时仅包含第一个字符 {}

    3. 从第一个字符开始遍历,如果map中没有包含该字符,那么subStringLengthEndWithCurChar = subStringLengthEndWithLastChar + 1.

      如果map中已经有该字符,我们看一下它是否包含在以上一个字符结尾的子串当中,如果包含:那么以上个子串结尾的字符串从上一个当前字符处截断,然后长度加1,否则的话:继续在上个字符串的基础上长度加1.

    4. 开始遍历

    5.map = {(a,0)}

    6. map = {(a,0),(b,1)}

    7. map = {(a,0),(b,1),(c,2)}

    8. map = {(a,3),(b,1),(c,2)}

    9. map = {(a,3),(b,4),(c,2)}

    10. map = {(a,3),(b,4),(c,5)}

    11. map = {(a,3),(b,6),(c,5)}

    12. map = {(a,3),(b,7),(c,2)}结束


    【java代码】

     1 public class Solution {
     2     public static int lengthOfLongestSubstring(String s) {
     3         if(s.length() <= 0) return 0;
     4         int[] lengthNum = new int[s.length()];
     5         Map<Character, Integer> index = new HashMap<>();
     6 
     7         int max = 0;
     8         for(int i = 0; i < s.length(); i++) {
     9             if(!index.containsKey(s.charAt(i))) {
    10                 lengthNum[i] = lengthNum[i-1] + 1;
    11             }
    12             else if(i - index.get(s.charAt(i)) <= lengthNum[i-1]) {
    13                 lengthNum[i] = i - index.get(s.charAt(i));
    14             }
    15             else{
    16                 lengthNum[i] = lengthNum[i-1] + 1;
    17             }
    18             index.put(s.charAt(i), i);
    19         }
    20         for(int i = 0; i < s.length(); i++) {
    21             max = Math.max(max, lengthNum[i]);
    22         }
    23         return max;
    24     }
    25 }
  • 相关阅读:
    多进程之数据安全问题
    windows 下安装 RabbitMQ
    springCloud Config分布式配置中心
    git配置ssh
    spring cloud Gateway 新一代网关
    spring cloud Hystrix 断路器
    spring cloud OpenFeign 服务接口调用
    Ribbon负载均衡服务调用
    consul服务注册与发现
    Eureka服务治理
  • 原文地址:https://www.cnblogs.com/liujinhong/p/6026302.html
Copyright © 2011-2022 走看看