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

    /**
     * 3. Longest Substring Without Repeating Characters
     * https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
     * https://www.youtube.com/watch?v=3IETreEybaA
     *
     * Given a string, find the length of the longest substring without repeating characters.
    
    Example 1:
    Input: "abcabcbb"
    Output: 3
    Explanation: The answer is "abc", with the length of 3.
    
    Example 2:
    Input: "bbbbb"
    Output: 1
    Explanation: The answer is "b", with the length of 1.
    
    Example 3:
    Input: "pwwkew"
    Output: 3
    Explanation: 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.
     * */
    class Solution {
        fun lengthOfLongestSubstring(s: String): Int {
            //1.
            //time complexity:O(n*n)
            //space complexity:O(n)
            /*val length = s.length
            for (i in 0 until length) {
                val sb = StringBuilder()
                var subI = i
                while (subI < length) {
                    if (sb.toString().indexOf(s[subI]) == -1) {
                        //if not found the char in substring, add it up
                        sb.append(s[subI])
                    } else {
                        break
                    }
                    subI++
                }
                result = Math.max(result, sb.toString().length)
            }*/
    
            //2.
            //use sliding window and ArrayList to reduce the time complexity to O(n)
            var max = 0
            var left = 0
            var right = 0
            val length = s.length
            val set = ArrayList<Char>(length)
            println(s)
            while (right < length) {
                if (!set.contains(s[right])){
                    set.add(s[right])
                    right++
                    max = Math.max(max,set.size)
                } else {
                    set.remove(s[left])
                    left++
                }
            }
            return max
        }
    }
  • 相关阅读:
    laravel tinker的使用
    清空表中数据
    不要为过多思考浪费你的精力
    #tomcat#启动过程分析(上)
    #hashMap冲突原理#详细
    #数组集合知识#HashMap的实现原理
    #数据库#连接数据库的几个步骤
    #数据库#JDBC基础知识
    #数据库#查询语句 1=1的使用条件
    #tomcat#虚拟主机配置及访问(三)
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12435065.html
Copyright © 2011-2022 走看看