Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode3.滑动窗口: 双指针法(Kotlin语言)-无重复字符的最长子串

LeetCode3.滑动窗口: 双指针法(Kotlin语言)-无重复字符的最长子串

作者头像
一个会写诗的程序员
修改于 2023-09-21 08:56:39
修改于 2023-09-21 08:56:39
72300
代码可运行
举报
运行总次数:0
代码可运行

LeetCode3.滑动窗口: 双指针法(Kotlin语言)-无重复字符的最长子串

题目描述

无重复字符的最长子串

  • 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。

示例 1:

输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题思路

暴力破解法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 暴力破解法: 遍历所有子串,会出现超时 LTE
 */
fun lengthOfLongestSubstring(s: String): Int {
    var ans = 0
    // 遍历所有子串
    val charArray = s.toCharArray()
    val n = charArray.size
    if (n == 0) return 0
    for (i in 0 until n) {
        for (j in i..n) {
            val substr = s.substring(i, j)
            if (isUniqString(substr)) {
                ans = Math.max(ans, substr.length)
            }
        }
    }
    return ans
}

/**
 * 判断字符串中的字符是否全部无重复
 */
fun isUniqString(s: String): Boolean {
    val charArray = s.toCharArray()
    val len1 = charArray.size
    val len2 = charArray.groupBy { it }.keys.size
    return len1 == len2
}

滑动窗口: 双指针法

滑动窗口是数组/字符串问题中常用的抽象概念。窗口通常是在数组/字符串中由开始和结束索引定义的一系列元素的集合,即 [i, j)(左闭,右开)。而滑动窗口是可以将两个边界向某一方向“滑动”的窗口。例如,我们将 [i, j) 向右滑动 1 个元素,则它将变为 [i+1, j+1) (左闭,右开)。

使用 HashSet 作为滑动窗口,我们可以用 O(1) 的时间来完成对字符是否在当前的子字符串中的检查。

回到我们的问题,我们使用 HashSet 将字符存储在当前窗口 [i, j)(最初 j = i)中。 然后我们向右侧滑动索引 j,如果它不在 HashSet 中,我们会继续滑动 j。直到 s[j] 已经存在于 HashSet 中。

此时,我们找到的没有重复字符的最长子字符串将会以索引 i 开头。 如果我们对所有的 i 这样做,就可以得到答案。

滑动窗口-双指针法源代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
    fun lengthOfLongestSubstring(s: String): Int {
        var ans = 0
        var left = 0
        var right = 0
        val n = s.length

        val window = mutableSetOf<Char>()

        while (left < n && right < n) {
            // slide right pointer
            if (!window.contains(s[right])) {
                window.add(s[right++])
                ans = Math.max(ans, right - left)
            } else {
                // slide left pointer
                window.remove(s[left++])
            }
        }

        return ans
    }

}
3. Longest Substring Without Repeating Characters

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.

参考资料

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
SpringBoot - 构建监控体系01_使用 Actuator 组件实现及扩展系统监控 我们引入了 Spring Boot Actuator 组件来满足 Spring Boot 应用程序的系统监控功能,并重点介绍了如何扩展常见的 Info 和 Health 监控端点的实现方法。
小小工匠
2021/08/17
9890
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
基于Prometheus搭建SpringCloud全方位立体监控体系
最近公司在联合运维做一套全方位监控的系统,应用集群的技术栈是SpringCloud体系。虽然本人没有参与具体基础架构的研发,但是从应用引入的包和一些资料的查阅大致推算出具体的实现方案,这里做一次推演,详细记录一下整个搭建过程。
Throwable
2020/06/23
2.7K0
Spring Boot整合 Prometheus
Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API,应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。Micrometer 还支持推送数据到多个不同的监控系统。Micrometer类似日志系统中SLF4J。
BUG弄潮儿
2021/08/13
1.5K0
可观测性神器之 Micrometer
对于大部分开发人员来说可能用过普罗米修斯Grafana这样的监控系统,从未听说过Micrometer工具,这里就详细的来介绍下可观测性神器Micrometer,让你在开发时使用它就和使用SLFJ 日志系统一样简单易用,有效的提升系统的健壮性和可靠性。
宋小生
2022/12/05
1.8K0
可观测性神器之 Micrometer
聊聊micrometer的HistogramGauges
针对springboot应用,配备有各种export的AutoConfiguration,详见org.springframework.boot.actuate.autoconfigure.metrics.export包,2.0.1版本目前支持了如下类型的export:
code4it
2018/09/17
1.8K0
SpringBoot+Prometheus:微服务开发中自定义业务监控指标的几点经验
从马楠的上一篇文章中,我们已经了解到Prometheus的一大优势,是可以在应用内定义自己的指标做监控。我们在 SpringBoot 做微服务的生产环境中,使用自定义指标监控诸多物联网传感器,时序数据结构简单清晰,监控与统计反应迅捷,效果良好。
王录华
2019/07/31
16.2K0
SpringBoot+Prometheus:微服务开发中自定义业务监控指标的几点经验
Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
哎_小羊
2019/09/18
10.6K0
Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能
micrometer自定义metrics
spring-boot-actuator-autoconfigure-2.0.0.RELEASE-sources.jar!/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java
code4it
2018/09/17
2.9K0
实战|如何优雅地自定义Prometheus监控指标
大家好!我是"无敌码农",今天要和大家分享的是在实际工作中“如何优雅地自定义Prometheus监控指标”!目前大部分使用Spring Boot构建微服务体系的公司,大都在使用Prometheus来构建微服务的度量指标(Metrics)类监控系统。而一般做法是通过在微服务应用中集成Prometheus指标采集SDK,从而使得Spring Boot暴露相关Metrics采集端点来实现。
用户5927304
2021/04/14
2.1K0
SpringBoot Actuator — 埋点和监控
监控机器环境的性能和业务流程或逻辑等各项数据,并根据这些数据生成对应的指标,那么我们就称为数据埋点。比如我们想知道某个接口调用的 TPS、机器 CPU 的使用率,这些都可以用到数据埋点
晚上没宵夜
2021/11/16
1.4K0
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控
(3)这里以【订单成功数量】、【订单失败数量】、【订单成功金额】、【订单失败金额】为例进行统计
DannyHoo
2021/12/23
1.3K0
【监控利器Prometheus】——Prometheus+Grafana监控SpringBoot项目业务指标监控
聊聊ExecutorService的监控
metrics-core-4.0.2-sources.jar!/com/codahale/metrics/InstrumentedExecutorService.java
code4it
2018/10/18
1.3K0
Springboot2 Metrics之actuator集成influxdb, Grafana提供监控和报警
到目前为止,各种日志收集,统计监控开源组件数不胜数,即便如此还是会有很多人只是tail -f查看一下日志文件。随着容器化技术的成熟,日志和metrics度量统计已经不能仅仅靠tail -f来查看了,你甚至都不能进入部署的机器。因此,日志收集和metrics统计就必不可少。日志可以通过logstash或者filebeat收集到ES中用来查阅。对于各种统计指标,springboot提供了actuator组件,可以对cpu, 内存,线程,request等各种指标进行统计,并收集起来。本文将粗略的集成influxdb来实现数据收集,以及使用Grafana来展示。
Ryan-Miao
2019/06/22
2.2K0
Prometheus + Grafana 监控 SpringBoot
Prometheus 是监控系统,可以从 Springboot 获取监控数据,以时序数据的形式存储,并提供了监控数据的查询服务。
dys
2020/02/19
2K0
聊聊springboot的TomcatMetricsBinder
org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfiguration.java
code4it
2023/10/30
2820
聊聊springboot的TomcatMetricsBinder
手把手教你实现SpringBoot微服务监控!
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/03/04
4.6K0
聊聊springboot的TomcatMetricsBinder
org/springframework/boot/actuate/autoconfigure/metrics/web/tomcat/TomcatMetricsAutoConfiguration.java
code4it
2023/10/27
2000
聊聊springboot1.x及2.x的JvmGcMetrics的区别
本文主要研究一下springboot1.x及2.x的JvmGcMetrics的区别
code4it
2018/09/17
1.2K0
通过micrometer实时监控线程池的各项指标
最近的一个项目中涉及到文件上传和下载,使用到JUC的线程池ThreadPoolExecutor,在生产环境中出现了某些时刻线程池满负载运作,由于使用了CallerRunsPolicy拒绝策略,导致满负载情况下,应用接口调用无法响应,处于假死状态。考虑到之前用micrometer + prometheus + grafana搭建过监控体系,于是考虑使用micrometer做一次主动的线程池度量数据采集,最终可以相对实时地展示在grafana的面板中。
Throwable
2020/06/23
4.5K0
聊聊springboot2的micrometer
springboot2在spring-boot-actuator中引入了micrometer,对1.x的metrics进行了重构,另外支持对接的监控系统也更加丰富(Atlas、Datadog、Ganglia、Graphite、Influx、JMX、NewRelic、Prometheus、SignalFx、StatsD、Wavefront)。1.x的metrics都有点对齐dropwizard-metrics的味道,而micrometer除了一些基本metrics与dropwizard-metrics相类似外,重点支持了tag。这是一个很重要的信号,标志着老一代的statsd、graphite逐步让步于支持tag的influx以及prometheus。
code4it
2018/09/17
2.2K0
推荐阅读
相关推荐
SpringBoot - 构建监控体系02_定义度量指标和 Actuator 端点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验