zoukankan      html  css  js  c++  java
  • 最长无重复字符的子串 · Longest Substring Without Repeating Characters

    [抄题]:

    给定一个字符串,请找出其中无重复字符的最长子字符串。

    例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3

    对于,"bbbbb",其无重复字符的最长子字符串为"b",长度为1

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    hashset, hashmap想着是简单,但是实现起来都要先存再取,其实比较麻烦

    涉及到字母甚至256个字符的出现次数时,直接用数组int[256]反而比较方便,随意地可以设成0 1,修改极其方便。

    有数组的话,和两根指针练习比较紧密

    [一句话思路]:

    同向不定窗口

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    i复位时写成j了,要小心

    [总结]:

    boy全部遍历到(再次初始化i)且只走一次,girl全部遍历到且只走一次(j不复位)

    [复杂度]:Time complexity: O(2n) Space complexity: O(n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    charat(i)是圆括号不是方括号

    [关键模板化代码]:

    for (i = 0; i < s.length(); i++) {
                while (j < s.length() && map[s.charAt(j)] == 0) {//bracket
                j++
                }
                map[s.charAt(i)] = 0;
            }    
    同向不定窗口

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    public class Solution {
        /**
         * @param s: a string
         * @return: an integer
         */
        public int lengthOfLongestSubstring(String s) {
            //corner case
            if (s == null) {
                return 0;
            }
            //i,j go in the same dir
            int i = 0, j = 0;
            int ans = 0;
            int[] map = new int[256];
            
            for (i = 0; i < s.length(); i++) {
                while (j < s.length() && map[s.charAt(j)] == 0) {//bracket
                    map[s.charAt(j)] = 1;
                    ans = Math.max(ans, j - i + 1);
                    j++;
                }
                map[s.charAt(i)] = 0;
            }
            
            return ans;
        }
    }
    View Code
  • 相关阅读:
    [django]media_url
    django部署到apache出现DLL load failed

    Django model relationship field
    python下划线变量的含义
    JavaScript 对象属性作实参以及实参对象的callee属性
    Javascript变长参数和默认参数
    JavaScript 数组
    JavaScript 操作对象属性(设置属性, setter/getter, 序列化)
    JavaScript 对象笔记
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8504816.html
Copyright © 2011-2022 走看看