day4——无重复字符的最长子串
// 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误,
或有其他见解,往不吝赐教,感激不尽,拜谢。
领扣 第2题 今日算法
题干
//给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
//
// 示例 1:
//
// 输入: "abcabcbb"
// 输出: 3
// 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
// 示例 2:
//
// 输入: "bbbbb"
// 输出: 1
// 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
// 示例 3:
//
// 输入: "pwwkew"
// 输出: 3
// 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
// 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
/*
*初次解题,仍是使用的暴力解法
*受昨天影响,采用hashmap作为容器
*当容器中包含该元素时,
* 则从该元素之后重新填入元素,
* 同组数据540ms 仅超越了0.98%
* 暴力方法实在是有点蠢
* */
public static int lengthOfLongestSubstring(String s) {
if(s.length()<=1){
return s.length();
}
HashMap<Character,Integer> map =new HashMap<>(s.length());
char[] chs = s.toCharArray();
char c;
int maxlength=0;
for(int a=0;a<chs.length;a++){
c=chs[a];
if(!map.containsKey(c)){
map.put(c,a);
if(a==chs.length-1){
int size = map.size();
if(maxlength<size){
maxlength=size;
}
}
}else{
a=map.get(c);
int size = map.size();
if(maxlength<size){
maxlength=size;
}
map.clear();
}
}
return maxlength;
}
第一次尝试
/*
* 愚蠢的我只记得了昨天的hashmap,
* 当点开了前列的一个答案时
* 才特么的想起了hashset
* 顺便学习到了 滑窗思想
* 设立了窗户的边界 i,j
* 当窗户中包含了某一元素时,则不停的收缩左窗边(i--)
* 相当精彩 牙很痛 是在写不下了
* 先这样吧 明天再细分析和写注释
* */
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){
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;
}
第二次尝试
Experience is the name every one gives to their mistakes.
每个人犯了错误,都自称是经验
写于 2018.11.19(牙好痛)
day4——无重复字符的最长子串的更多相关文章
- leetcode刷题第三天<无重复字符的最长子串>
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 : 输入: "abcabcbb" 输出: 解释: 因为无重复字符的最长子串是 . 示例 : 输入: &quo ...
- [Swift]LeetCode3. 无重复字符的最长子串 | Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...
- [LeetCode] 3. 无重复字符的最长子串
题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...
- leetcode 刷题(3)--- 无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- 无重复字符的最长子串-LeetCode-第3题-C++
题目:无重复字符的最长子串 题目描述:给定一个字符串,找出不含有重复字符的最长子串的长度. 最长不重复子串可能有很多个,但是其长度只有一种. 方法一:暴力搜索法 方法二:滑动窗口 哈希表:要查找一个元 ...
- 【LeetCode】3. 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- [LeetCode]无重复字符的最长子串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...
随机推荐
- Github上36893颗星!这个被称为下一代企业级应用首选技术你学了么?
用一句话概括:这个技术,是JAVA后端框架的龙头老大,执牛耳者.这个技术就是: Spring Boot春靴. Spring Boot到底凭什么成为Java社区最具影响力的项目?说直白点,他爹Spr ...
- npm手册
npm现在都是随同NodeJS一起安装的包管理和分发工具,所以npm的安装,只要下载新版的nodejs已经集成了npm. 安装好了以后,直接输入npm或者npm help,会出来一些npm自带的命令. ...
- HDU 3586 二分答案+树形DP判定
HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...
- zabbix监控实战<2>----zabbix-server的安装与部署
第一章 zabbix-server的安装与部署 1.1 环境部署 eth0 eth1 master 10.0.0.71 ...
- 《ASP.NET Core In Action》读书笔记系列三 ASP.NET Core如何处理请求的?
在本节中,您将看到ASP.NET Core应用程序如何运行的,从请求URL开始到页面呈现在浏览器中. 为此,您将看到 一个HTTP请求在Web服务器中是如何被处理的.ASP.NET Core如何扩展该 ...
- dos模式下切换电脑用户
启用管理员运行dos 然后输入net user adminstrator /active.yes 然后点击打开按钮 就可以切换电脑用户了
- Linux系统安装Docker
1.安装Linux系统 2.查看centos内核版本.Docker要求centos的内核版本必须高于3.10.使用命令:uname -r 查看内核版本.如果低于3.10,使用命令:yum update ...
- [转载]C# TimeSpan 计算时间差(时间间隔)
TimeSpan 结构 表示一个时间间隔. 命名空间:System 程序集:mscorlib(在 mscorlib.dll 中) 说明: 1.DateTime值类型代表了一个从公元0001年1月1日 ...
- Linux开局配置注意事项
1.修改ssh配置文件远程端口号,防止攻击 sed -ri 's/“#Port 22”/“Port 10086”/g‘ /etc/ssh/sshd_config 2.修改ssh配置文件 ...
- Appium(一)---环境搭建的一些问题
最近开始学习Appium,一款很不错的自动化测试工具,网上已经有大量的环境搭建教程,我就不再细说,我搭建环境时主要参考如下两个博客https://www.cnblogs.com/yoyoketang/ ...