[剑指offer]面试题第[48]题[Leetcode][JAVA][第3题][无重复字符的最长字串][滑动窗口][HashSet/Map]

【问题描述】[第3题][无重复字符的最长字串]

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

【解答思路】

1. 滑动窗口之 HashMap

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时间复杂度:O(N) 空间复杂度:O(N)

public int lengthOfLongestSubstring(String s) {int n = s.length();int ans = 0;Map<Character,Integer> map = new HashMap<>();for(int start=0,end=0; end  < n ; end ++){char alpha = s.charAt(end);if(map.containsKey(alpha)){start = Math.max(map.get(alpha), start);}ans = Math.max(ans,end-start +1);//记录start应该调整到哪里map.put(s.charAt(end),end+1);}return ans;}
2. 滑动窗口之HashSet

时间复杂度:O(N) 空间复杂度:O(N)

 public int lengthOfLongestSubstring(String s) {int n = s.length();Set<Character> set = new HashSet<>();int ans = 0, i = 0, j = 0;while (i < n && j < n) {// try to extend the range [i, j]if (!set.contains(s.charAt(j))){set.add(s.charAt(j++));ans = Math.max(ans, j - i);}else {set.remove(s.charAt(i++));}}return ans;}

在这里插入图片描述

class Solution {public int lengthOfLongestSubstring(String s) {// 哈希集合,记录每个字符是否出现过Set<Character> occ = new HashSet<Character>();int n = s.length();// 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动int rk = -1, ans = 0;for (int i = 0; i < n; ++i) {if (i != 0) {// 左指针向右移动一格,移除一个字符occ.remove(s.charAt(i - 1));}while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {// 不断地移动右指针occ.add(s.charAt(rk + 1));++rk;}// 第 i 到 rk 个字符是一个极长的无重复字符子串ans = Math.max(ans, rk - i + 1);}return ans;}
}
2. 滑动窗口之 数组(本质HashMap)

时间复杂度:O(N) 空间复杂度:O(N)

 public int lengthOfLongestSubstring(String s) {//128个字符 int[] m = new int[128];int len = 0;//i: start  j:end for(int i = 0, j = 0; j < s.length(); j++){i = Math.max(m[s.charAt(j)], i);len = Math.max(len, j - i + 1);//记录i应该调整到哪里m[s.charAt(j)] = j + 1;}return len;}

【总结】

1. 滑动窗口思想 常用于字符数组题目中
  • 更新start(+1)
  • 边界思考清楚 start end 迭代
2.Java String 类
3.HashMap 或 HashSet常见用法

3.1 HashSet
(1)增加
public boolean add(E e);
(2)删除
public boolean remove(Object j);
(3)对比查找
public boolean contains(Object j);
(4)清空集合
public void clear();
(5)获取长度
public int size();
3.2 HashMap
(1) 插入键值对数据
public V put(K key, V value)
(2)根据键值获取键值对值数据
public V get(Object key)
(3)获取Map中键值对的个数
public int size()
(4)判断Map集合中是否包含键为key的键值对
public boolean containsKey(Object key)
(5)判断Map集合中是否包含值为value的键值对
boolean containsValue(Object value)
(6)判断Map集合中是否没有任何键值对
public boolean isEmpty()
(7)清空Map集合中所有的键值对
public void clear()
(8)根据键值删除Map中键值对
public V remove(Object key)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言程序改错例题,C语言程序改错习题

C语言程序改错习题行动是通向成功的唯一途径。以下是小编为大家搜索整理的C语言程序改错习题&#xff0c;希望能给大家带来帮助!更多精彩内容请及时关注我们应届毕业生考试网!在考生文件夹下&#xff0c;给定程序MODI.C的功能是&#xff1a;求一维数组a中的.最大元素及其下标。…

java学习(172): 使用class实现反射编程,创建对象

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public test124(String name,Integer age){this.namename;this.ageage;}public test124(String name,int age,double money){this.namename…

关于mysql中GROUP_CONCAT函数的使用

偶然看到公司存储过程中有个字符串拼接的函数&#xff0c;改bug过程中使用到了&#xff0c;还挺有用的&#xff0c;于是记录下来方便记忆&#xff0c;帮助有需要的人。 这是我需要整理的串&#xff0c;他是调用了一个存储过程&#xff0c;传入组织机构的id和迭代层数&#xff0…

linux中tuned是否启动命令,tuned-adm 性能调优分析

tuned-adm 性能调优分析徐小东 (a.k.a toy)(xxdlhygmail.com)2017.04tuned-adm 简介RHEL 自带的性能调优工具&#xff0c;通过针对特定应用场景提供配置 (profile) 来改善系统性能性能调优方向CPU: governor、energy_perf_bias、min_perf_pct性能调优方向CPU: governor、energy…

java学习(173):class反射编程方法

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public test124(String name,Integer age){this.namename;this.ageage;}public test124(String name,int age,double money){this.namename…

[剑指offer]面试题第[25]题[Leedcode][JAVA][第21题][合并两个有序链表]

【问题描述】[简单] 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例&#xff1a;输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4【解答思路】 1. 非递归 时间复杂度&…

Windos下navcat连接虚拟机中的mysql

进入mysql命令行&#xff0c; 使用root用户&#xff0c;密码&#xff1a;youpassword&#xff08;你的root密码&#xff09;连接到mysql服务器&#xff1a;  # mysql -u root -proot   mysql>GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY youpassword WITH GRAN…

第二十三期:大规模网站架构?你是否熟悉?

大规模网站架构 •PHP –facebook,yahoo •Java –taobao,163 •Python –google •.NET –MySpace 语言不是可伸缩性的关键&#xff0c;架构才是关键 网站架构的目标 •高可用性(High Availability) •可伸缩性(Scalability) •高性能(High Performance) 事务 …

c语言子查询返回子菜单,T-SQL基础(三)之子查询与表表达式

子查询在嵌套查询中&#xff0c;最外面查询结果集返回给调用方&#xff0c;称为外部查询。嵌套在外部查询内的查询称为子查询&#xff0c;子查询的结果集供外部查询使用。根据是否依赖外部查询&#xff0c;可将子查询分为自包含子查询和相关子查询。自包含子查询不依赖外部查询…

centos踩坑指南之安装composer

composer是php的一个依赖管理器&#xff0c;那么安装composer可以快速编译php 但是在centos7以上 安装composer的有一个步骤有个小问题 对于centos6来说是 sudo mv composer.phar /usr/local/bin/composer对于centos7来说 sudo mv composer.phar /usr/bin/composer 这点要是不知…

[Leedcode][JAVA][第98题][验证二叉搜索树]

【问题描述】[第98题][验证二叉搜索树][中等] 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征&#xff1a;节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜…

图解CPU?

了解CPU 芯片组 CPU微观图 Cache层次结构 Cache-续 Xeon 5600系列CPU CPU内部各部件访问速度 False sharing问题 Cache lines Intel Sandy Bridge来了 CPU拓扑结构图 Cache相关硬件事件

c语言获取dll文件路径,C语言URLDownloadToFile获取文件下载进度

URLDownloadToFile是urlmon.dll提供的网络操作API&#xff0c;可以用于从指定的URL下载文件到本地&#xff0c;在C中通过类很容易实现下载进度的获取&#xff0c;今天需要在C语言中使用到这个函数&#xff0c;这里记录一下使用方法。该函数的定义如下所示。HRESULT URLDownload…

HOG特征人体检测

1. 引言 HOG&#xff08;Histogram of Oriented Gradient&#xff09;&#xff0c;即方向梯度直方图。它通过计算和统计局部区域的梯度方向直方图来构成特征&#xff0c;一般与SVM分类器结合用于目标的图像识别。由于人体姿势和外表的多变&#xff0c;在图像中检测人体是一项具…

[Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

【问题描述】[Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置&#xff0c;跳 1 步&#xff0c;然后跳 3 步到达数组的最后一个位置。【解答思路】 1. 动态规划 超时 第 1 步&…

大型动态应用系统平台系统架构?这些大家并不陌生

大型动态应用系统平台系统架构[多图] 动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式…

c语言round函数能四舍五入吗,怎么利用round函数实现四舍五入?

Excel强大的制表功能让很多人都对它无比依赖&#xff0c;它也早已成为日常必备的工具。我们在办公室工作时&#xff0c;经常会遇到要用 Excel处理数字的情况&#xff0c;需要对其进行四舍五入。那么实现这一操作&#xff0c;我们需要使用哪些Excel函数呢&#xff1f;今日小编就…

洛谷 - P2181 - 对角线 - 打表 - 组合数学

https://www.luogu.org/problemnew/show/P2181 对于某条对角线&#xff0c;除去从两端出发的对角线&#xff0c;其他的都与它有1个交点。 每个点有(n-3)条对角线&#xff0c;每条对角线和其余C(n-2,2)条对角线都有1个交点&#xff0c;共有n个点&#xff0c;重复计算交点再除以2…

InnoDB 事务/锁/多版本分析?你了解多少?

目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序列锁(autoinc lock) – 半一致读(semi-consistent read) – 隐式锁(implicit lock) • InnoDB多版本 – ReadView –…

[剑指offer]面试题第[42]题[Leedcode][JAVA][第53题][最大子序和][动态规划][贪心][分治]

【问题描述】[第53题][最大子序和][中等] 给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大…