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

LeetCode--3.无重复字符的最长子串

1 题目描述

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

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

示例 2:

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

示例 3:

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

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成

2 解题思路

解题思路

  1. 滑动窗口 + map, 对字符遍历一次就能找到最长子字符串, 时间复杂度 O(n)

2.1 代码实现

public int lengthOfLongestSubstring(String s) {  if (null == s || s.isEmpty()) {  return 0;  }  // key为字符串中的字符,value为字符下标  HashMap<Character, Integer> map = new HashMap<>();  // i为左指针,j为右指针  int i = -1;  // res为最长子串的长度  int res = 0;  for(int j = 0; j < s.length(); j++) {  // 如果map中包含当前字符,则将左指针移动到当前字符的下标  if (map.containsKey(s.charAt(j))) {  i = Math.max(i, map.get(s.charAt(j)));  }  // 将当前字符放入map中  map.put(s.charAt(j), j);  // 计算最长子串的长度  res = Math.max(res, j - i);  }  return res;  
}
http://www.lryc.cn/news/208643.html

相关文章:

  • iOS调试技巧——使用Python 自定义LLDB
  • 经典卷积神经网络 - ResNet
  • 一、高效构建Java应用:Maven入门和进阶
  • 【Pytorch】Pytorch学习笔记02 - 单变量时间序列 LSTM
  • C# 压缩图片
  • Linux: sysctl: rp_filter; 包到了内核,没有到socket,火星包martia
  • Liunx两台服务器实现相互SSH免密登录
  • 刷题笔记day03-链表
  • Lua入门使用与基础语法
  • RDMA概览
  • 设计模式(15)组合模式
  • 小黑子—spring:第一章
  • 【面向对象】理解面向对象编程中的封装性
  • ES修改字段类型详解
  • C++基础:函数模板
  • Facebook账号被封?那是因为没做对这些事
  • 虚拟机kafka
  • 软考 系统架构设计师系列知识点之设计模式(3)
  • 217. 存在重复元素、Leetcode的Python实现
  • 49.Redis缓存设计与性能优化
  • IDEA常用的一些插件
  • 基于定容积法标准容器容积标定中的电动针阀自动化解决方案
  • 26 行为型模式-命令模式
  • 一个Entity Framework Core的性能优化案例
  • 【Python 千题 —— 基础篇】列表排序
  • leetcode26:删除有序数组中的重复项
  • [FSCTF 2023] web题解
  • linux查看内存的方式
  • Python 编写 Flink 应用程序经验记录(Flink1.17.1)
  • 如何 通过使用优先级提示,来控制所有网页资源加载顺序