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 }
  • 相关阅读:
    asp.net 2.0 国际化 动态切换语言
    SKU、UPC、EAN和ISBN
    NCalc:处理数学运算的好帮手
    yaf 论坛安装
    Afterlogic xmail 邮局软件不能收email 设置
    要围着中心来做事
    保证Winform程序只有一个实例在运行
    可视热敏读写卡开发
    jQuery CSS 效果
    代碼小片斷
  • 原文地址:https://www.cnblogs.com/liujinhong/p/6026302.html
Copyright © 2011-2022 走看看