cstring判断是否包含子串_最长子串-滑动窗口
接下来我会找出LeetCode中一些比较有代表性的题,带来它的算法和讲解
很多题目,使用一般的暴力算法很多都能解出来,但时间复杂度可能是 O(n3),会比最优解慢很多,尤其是数据量变大时。
在我们实际项目中编写代码时会遇到各种情况,组织数据,处理数据,如果能在特定的情况使用特定的算法,就可以发挥事半功倍的效果,很有现实意义。
原题链接
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 :
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
暴力
这是一个比较经典的问题,查找无重复最长子串。
先看我最开始给出的解法
思路比较简单,借助Set,我可以很快的判断一个字符是否在一个集合里
从第一个字符开始开始遍历每个字符,然后从这个字符开始到最后一个字符,依次加入Set
如果Set没有就加入,一旦出现重复判断之前的最长长度和当前的最长长度,取较大值,Set清空
class Solution {public int lengthOfLongestSubstring(String s) {Set<Integer> t = new HashSet<>();int max = 0;for (int i = 0; i < s.length(); i++) {for (int j = i; j < s.length(); j++) {int a = s.charAt(j);if (!t.contains(a)) {t.add(a);} else {max = t.size() > max ? t.size() : max;t.clear();break;}}}if(t.size() > max){max = t.size();}return max;}
}
滑动窗口
先看解法
class Solution {public int lengthOfLongestSubstring(String s) {int max = 0;Set<Character> t = new HashSet<>();for (int i = 0, j = 0; i < s.length(); ) {if (j >= s.length()) {break;}if (!t.contains(s.charAt(j))) {t.add(s.charAt(j));max = Math.max(max, j - i +1);j++;}else{t.remove(s.charAt(i++));}}return max;}
}
暴力法有个明显的问题,比如我判断 abcabcbb
在第一字符时判断
a
ab
abc
abca
在第二个字符时判断
b
bc
bca
会有大量重复且不必要的判断
那么怎么避免呢
当我判断第一个字符到 abca
时,不在完全退回第二个字符重新判断,而是保留右侧的配置,左侧右移一位,那么现在就成了不重复时右侧游标右移,存在重复字符时,左侧游标右移,同时记录中间的最长长度
左侧游标和右侧游标依次滑动右移,就仿佛是一个会移动的窗口,中间的某个最大长度即为不含有重复字符的最长子串
滑动窗口优化
当我们遇到一个字符串pasdsad
,使用上述算法
p
pa
pas
pasd
asd
sd
d
ds
因为下一个字符是s
,所以左侧游标移动了3次才移除了当前窗口内s
但是如果直接能跳到s
位置呢
那么又会减少很多次操作
class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;Map<Character, Integer> map = new HashMap<>();for (int j = 0, i = 0; j < n; j++) {if (map.containsKey(s.charAt(j))) {i = Math.max(map.get(s.charAt(j)), i);}ans = Math.max(ans, j - i + 1);map.put(s.charAt(j), j + 1);}return ans;}
}
通过Map映射记录上一个重复字符的位置,发生重复是可使左侧游标直接跳到之前的重复位置。
关注我的Github项目,开启Java进阶之路,欢迎star
Asens/Java-Advancegithub.com
![](/assets/blank.gif)
cstring判断是否包含子串_最长子串-滑动窗口相关推荐
- 学渣的刷题之旅 leetcode刷题 3. 无重复字符的最长子串(暴力法、滑动窗口)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- uiautomation遍历windows所有窗口_万字长文!滑动窗口看这篇就够了!
大家好,我是小浩.今天是小浩算法 "365刷题计划" 滑动窗口系列 - 整合篇.之前给大家讲解过一些滑动窗口的题目,但未作系统整理. 所以我就出了这个整合合集,整合工作中除了保留原 ...
- Leetcode-76:最小覆盖子串(困难题) 滑动窗口法超详细解析
题目链接 https://leetcode-cn.com/problems/minimum-window-substring/ 题目 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有 ...
- cstring判断是否包含子串_leetcode76. 最小覆盖子串
leetcode76. 最小覆盖子串 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串. 示例: 输入: S = "ADOBECODEBANC&qu ...
- 字符串最长回文子串_最长回文子串
字符串最长回文子串 Problem statement: 问题陈述: Given a string str, find the longest palindromic substring. A sub ...
- 最长递增子序列 子串_最长递增奇偶子序列
最长递增子序列 子串 Problem statement: 问题陈述: Given a sequence of numbers you have to find out the length of t ...
- 最长递增子序列 子串_最长递增子序列
最长递增子序列 子串 Description: 描述: This is one of the most popular dynamic programming problems often used ...
- python判断字符串包含中文_高手接招! 小应用 用python3判断一个字符串是不是中文组成的...
在python3中,str默认是unicode编码 用 ord() 函数判断单个字符的unicode编码是否大于255即可. 一般来说,中文常用字的范围是:[\u4e00-\u9fa5] 准确点判断中 ...
- LeetCode 1234. 替换子串得到平衡字符串(滑动窗口)
1. 题目 有一个只含有 'Q', 'W', 'E', 'R' 四种字符,且长度为 n 的字符串. 假如在该字符串中,这四个字符都恰好出现 n/4 次,那么它就是一个「平衡字符串」. 给你一个这样的字 ...
最新文章
- 如何爬取知乎中问题的回答以及评论的数据?
- oracl 、mysql在线查看文档
- Redis附加功能之键过期功能
- linux互信封装脚本,使用shell脚本实现自动SSH互信功能
- Linux C----创建静态库
- Struts框架的核心业务
- PHP error_reporting() 错误控制函数功能详解
- [转]Vector、ArrayList和hashtable hashmap数据结构
- 样本打散后计算单特征 NDCG
- 单变量求解C语言,二分法求解单变量非线性方程及其应用与实现.doc
- 88个塑胶模具设计中常用知识点!
- C/C++计算字符串的长度
- 金融科技成为服贸会热议话题:数字化转型中如何保障金融安全
- 8box这件事欠考虑
- JavaScript中e.keycode详解
- html简单的时分秒计时器,时分秒自定义倒计时计时器
- C#使用表达式树不能包含动态操作,使用反射的方式来实现T类型
- 九张图看懂互联网金融模式
- php 感叹号有什么用,感叹号!代表什么意思?(标点符号的用法之感叹号)
- 数位 dp 最低位最高位之差绝对值大于2_人教版二年级数学下册复习重点考点分析带测试题2套,给孩子下载练习!...
热门文章
- 脑电图伪差去除matlab,脑电图伪差的识别方法.ppt
- python包怎么用_python的包怎么应用
- .net excel循环插数据_Python实战: 如何将数据从一个Excel文件移动到另一个?
- android https bks,如何将.cer转换为BKS
- java8 list切片_java中怎么从一个数组中截取一定长度的元素放到新数组中
- 黄聪:pjax使用心得总结
- Run P4 without P4factory - A Simple Example In Tutorials. -2
- Unit testing Cmockery 简单使用
- firefox-Developer开发者站点——关于Object.create()新方法的介绍
- (1)QlikView概要