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

黄江网站仿做wordpress 4.8 中文版

黄江网站仿做,wordpress 4.8 中文版,外贸网络营销策划方案制定,织梦网站怎样做安全防护LeetCode LCR 016. 无重复字符的最长子串 滑动窗口法解「无重复字符的最长子串」 问题描述 给定一个字符串 s,找出其中不含有重复字符的 最长连续子字符串 的长度。 示例 输入:s "abcabcbb" 输出:3(最长子串为 &qu…

LeetCode LCR 016. 无重复字符的最长子串


滑动窗口法解「无重复字符的最长子串」

问题描述

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

示例

输入:s = "abcabcbb"
输出:3(最长子串为 "abc"


解题思路

滑动窗口法(双指针)

  1. 窗口定义:用左右指针 leftright 表示当前窗口的左右边界,窗口内字符不重复。

  2. 核心操作:
    • 扩展右边界:右指针不断右移,直到遇到重复字符。

    • 收缩左边界:一旦发现重复,左指针右移一位,移除原左边界字符。

  3. 去重机制:通过哈希集合 Set 实时记录窗口内的字符,确保窗口的唯一性。


算法流程

步骤详解

  1. 初始化:
    • 左指针 left = 0,右指针 right = 0

    • 哈希集合 Set 存储窗口字符

    • 结果变量 res 记录最大长度

  2. 滑动窗口扩展:

    for (int left = 0; left < s.length(); left++) {// 右指针扩展至出现重复或越界while (right < s.length() && !set.contains(s.charAt(right))) {set.add(s.charAt(right));right++;}// 更新最大长度res = Math.max(res, right - left);// 左指针右移一位,移除原左边界字符set.remove(s.charAt(left));
    }
    
  3. 动态调整:
    • 每次左指针右移后,右指针从当前位置继续扩展,无需回溯。


复杂度分析

• 时间复杂度:O(n),左右指针各遍历一次字符串。

• 空间复杂度:O(1),字符集大小固定(ASCII 最多 128 种字符)。


代码实现
public static int lengthOfLongestSubstring(String s) {int right = 0;      // 窗口右边界int res = 0;        // 最长子串长度Set<Character> set = new HashSet<>();for (int left = 0; left < s.length(); left++) {// 右指针扩展至出现重复或越界while (right < s.length() && !set.contains(s.charAt(right))) {set.add(s.charAt(right));right++;}// 更新最大长度res = Math.max(res, right - left);// 左指针右移一位,移除原左边界字符set.remove(s.charAt(left));}return res;
}

力扣通过截图

在这里插入图片描述


示例解析

示例 1:s = "abcabcbb"

  1. 初始状态:left=0, right=0
    • 窗口扩展至 right=3(字符 a,b,c),此时 res=3

  2. 左指针右移:left=1,移除 a
    • 窗口扩展至 right=4(加入 a 失败,窗口变为 b,c,ares=3

  3. 循环结束:最终 res=3


关键点说明
为何时间复杂度是 O(n)?
• 每个字符最多被左右指针各访问一次,无重复操作。

为何用 Set 而不用 Map
Set 直接检查是否存在重复,无需记录索引,节省空间。

如何处理中间重复字符?
• 左指针每次仅移动一位,逐步缩小窗口,确保窗口内始终无重复。


拓展思考

优化版本(跳跃式收缩)
若记录字符的最新位置,左指针可跳跃式移动:

Map<Character, Integer> map = new HashMap<>();
int left = 0;
for (int right = 0; right < s.length(); right++) {if (map.containsKey(s.charAt(right))) {left = Math.max(left, map.get(s.charAt(right)) + 1);}map.put(s.charAt(right), right);res = Math.max(res, right - left + 1);
}

• 优势:减少左指针移动次数,提升效率。

力扣通过截图

在这里插入图片描述


通过滑动窗口法,我们高效地解决了子串查重问题,平衡了时间与空间复杂度。此方法在字符串处理中具有广泛的应用场景。

http://www.dtcms.com/wzjs/788383.html

相关文章:

  • 华为官方网站进入高水平 专业 建设 网站
  • 义乌网站建设工作室自己建网站需要什么软件
  • 中国做网站的公司有哪些新闻 最新消息
  • 奉贤网站建设番禺网络科技有限公司
  • 三屏营销型网站建设制作一个网站平台要多钱
  • 网站文件验证Wordpress仿appstore
  • 河源市建设网站最好的网站建设推广
  • 一鸣东莞网站建设公司在线整合营销推广
  • 学校建网站jsp可以做网站首页吗
  • 福建省住房城乡建设厅网站做相亲网站
  • 个人或主题网站建设wordpress关注
  • php 网站开发 视频清远做网站的
  • 深圳网站设计公司发展历程seo如何优化关键词排名
  • expedia电子商务网站建设赤壁专业建站公司
  • 网站数据接口怎么做吉林网站优化
  • 必应站长平台网站建设教程.
  • 网站开发视频教程迅雷下载山西省吕梁市天气
  • 网站页面的组成网站开发引用思源黑体
  • 昆明网站建设系统有哪些天元建设集团有限公司滨州分公司是国企吗
  • 企业网站建设源码 微信 手机哈尔滨建站免费模板
  • 国外网站翻墙怎么做手机网站布局
  • 网站功能设计有哪些要求大连做网站哪家便宜
  • 吉林省绥中县城乡建设局网站海淘一号 网站 怎么做的
  • 沭阳城乡建设局网站网站开发微信小程序需求量大吗
  • 外贸网站一般用什么框架wordpress新闻编辑器
  • ui设计师作品集网站域名如何解绑一个网站
  • 分类信息网站开发怎样购买网站程序
  • 做淘宝客最大的网站是叫什么名字艺术设计有限公司
  • 东营网站建设优化技术网站的费用怎么做会计分录
  • asp做网站计数器如何介绍网站模板下载地址