首页 > 其他分享 >leetcode面试经典150题- 3. 无重复字符的最长子串

leetcode面试经典150题- 3. 无重复字符的最长子串

时间:2024-08-21 17:37:24浏览次数:6  
标签:子串 150 right int maxLen leetcode left

https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-interview-150

 

 

package leetcode150

import "testing"

func TestLengthOfLongestSubstring(t *testing.T) {
    s := "au"
    res := lengthOfLongestSubstring(s)
    println(res)
}

func lengthOfLongestSubstring(s string) int {
    cMap := make(map[byte]int)
    left, right, maxLen := 0, 0, 0
    for right < len(s) {
        c := s[right]
        if cMap[c] == 1 {
            if maxLen < right-left {
                maxLen = right - left
            }
            for ; left <= right && s[left] != c; left++ {
                delete(cMap, s[left])
            }
            left++
            right++
        } else if right == len(s)-1 {
            if maxLen < right-left+1 {
                maxLen = right - left + 1
            }
            break
        } else {
            cMap[c]++
            right++
        }
    }
    return maxLen
}

 

标签:子串,150,right,int,maxLen,leetcode,left
From: https://www.cnblogs.com/MoonBeautiful/p/18372205

相关文章

  • 面试+算法之动态规划(Java):斐波那契、背包问题、走棋盘、分苹果、连续子数组最大和、
    概述Dynamicprogramming,简称DP,动态规划,基础算法之一,维基百科的解释:是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时......
  • 面试+算法之回文(Java):验证回文串、回文数、最长回文子串、回文链表、分割成回文串、
    概述算法是一个程序员的核心竞争力,也是面试最重要的考查环节。本文整理一些与回文相关的基础算法题。注:本文语言为Java。验证回文串如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。给定一个字符......
  • 最大连续1的个数 III(LeetCode)
    题目        给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。解题deflongestOnes(nums,k):left=0max_len=0zero_count=0forrightinrange(len(nums)):#如......
  • 150. 逆波兰表达式求值
    题目描述给你一个字符串数组tokens,表示一个根据逆波兰式表示法表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。解题思路我们依次遍历数据,如果遇到数字我们就直接入栈,如果遇到运算符,我们就取出栈顶的元素两个,然后进行运算,这里要注意-和/这两个运算符,取栈......
  • leetcode 热题思路解析-最长连续序列
    题目给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为O(n)的算法解决此问题。示例1:输入:nums=[100,4,200,1,3,2]输出:4解释:最长数字连续序列是[1,2,3,4]。它的长度为4。示例2:输入......
  • leetcode面试经典150题- 15. 三数之和
    https://leetcode.cn/problems/3sum/description/?envType=study-plan-v2&envId=top-interview-150 packageleetcode150import("sort""testing")funcTestThreeSum(t*testing.T){nums:=[]int{0,2,2,3,0,1,2,3,-......
  • leetcode322. 零钱兑换,完全背包最值问题,附背包问题模板
    leetcode322.零钱兑换给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表示总金额。计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。你可以认为每种硬币的数量是无限的。示例1:输入:coins=[1,2,5......
  • LeetCode300.最长递增子序列
    LeetCode300.最长递增子序列力扣题目链接(opensnewwindow)给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[......
  • 【Leetcode 1370 】 数组序号转换—— 桶计数
    给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤2,直到你没法从 s 中选择字符。从 s 中选出 ......
  • 【Leetcode 1365 】 有多少小于当前数字的数字 —— 数组模拟哈希表(就没写过这么详细
    给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j!=i 且 nums[j]<nums[i] 。以数组形式返回答案。示例1:输入:nums=[8,1,2,2,3]输出:[4,0,1,1,3]解......