当前位置: 首页 > article >正文

leetcode——无重复字符的最长字串(java)

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

示例 1:

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

示例 2:

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

示例 3:

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

解题方法:(不定长滑动窗口)

1.经分析,很明显使用不定长滑动窗口来进行解题,并且涉及到字符串的切片,所以我们需要一个StringBuilder来充当滑窗。

2.还需要注意的是这时候先把字符串转化为字符数组比较好操作。

3.开始遍历字符数组,将滑窗中没有的字符添加进去,直到出现重复字符,不再添加,开始删除,使用切片删除,最后在添加元素进入滑窗。

4.记得最后也还要更新一下结果,因为最后一次滑窗很可能没有重复字符,没有进入到else中更新结果。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int ans = 0;
        StringBuilder tmp = new StringBuilder();
        char[] ns = s.toCharArray();
        int n = ns.length;
        for (int i = 0; i < n; i++) {
            if (tmp.indexOf(String.valueOf(ns[i])) == -1) {
                tmp.append(ns[i]);
            } else {
                int cur = tmp.length();
                ans = Math.max(cur, ans);
                tmp.delete(0, tmp.indexOf(String.valueOf(ns[i])) + 1);
                tmp.append(ns[i]);
            }
        }
        ans = Math.max(tmp.length(), ans);
        return ans;
    }
}


http://www.kler.cn/a/512174.html

相关文章:

  • 计算机网络 (46)简单网络管理协议SNMP
  • 强推未发表!3D图!Transformer-LSTM+NSGAII工艺参数优化、工程设计优化!
  • 1166 Summit (25)
  • 2025年1月17日(点亮三色LED)
  • Java 对象池管理的高性能工具库 Apache Commons Pool 2
  • springboot医院信管系统
  • 网站HTTP改成HTTPS
  • 一种简单又强势的Js-Forward脚本编写方式
  • 计算机网络 (50)两类密码体制
  • 客户端/服务端 负载均衡
  • C/C++、网络协议、网络安全类文章汇总
  • 自动驾驶之DriveMM: All-in-One Large Multimodal Model for Autonomous Driving
  • 『 C++ 』深入理解类中的 this 指针在适配器的作用
  • 数据库高可用方案-03-主备等高可用架构
  • Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
  • 如何在 Pytest 中使用命令行界面和标记运行测试
  • python清除空格函数
  • 深入解析浏览器异步任务调度 API:让 Web 开发更高效
  • 通过Ukey或者OTP动态口令实现windows安全登录
  • ent.SetDatabaseDefaults()
  • Windows图形界面(GUI)-QT-C/C++ - Qt QToolBox详解教程
  • JSON全解析:语法、转换与FastJson应用指南
  • Linux(UOS系统:DHCP)
  • 数据库的DML
  • Kafka 日志存储 — 日志索引
  • IO模型与NIO基础二