LeetCode-3.无重复字符的最长字串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是"abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是"b",所以其长度为 1。
题目思路:建立hashmap,记载每个字符出现的位置,并设变量index记载子串起始的下标,然后从下标为0开始遍历字符串
遍历到下标i时,此时有两种情况:
1.hashmap中没有该字符s.charAt(i)或者hashmap中有该字符s.charAt(i),但该字符map.get()不在index后,此时可以直接map.put(),添加或替换数据
2.hasmap中有该字符s.charAt(i)并且map.get()在index后,此时代表有重复字符,计算此时的字串,并使index=重复字符下标+1,最后map.put()替换数据
详细说明例子: (i为遍历下标,char为s.charAt(i),index为子串开始下标)
输入:“abcabcbb”
第一次遍历:i=0,char=a,进入情况1,index=0,子串:“a”,map中(a:0)
第二次遍历:i=1,char=b,进入情况1,index=0,子串:“ab”,map中(a:0,b:1)
第三次遍历:i=2,char=c,进入情况1,index=0,子串:“abc”,map中(a:0,b:1,c:2)
第四次遍历:i=3,char=a,进入情况2,因为map.get(a)=0>=index,所以有重复数据a,计算此时的子串长度(3-0=3),与最大长度比较,并让index+=1,更新map数据
index=1,子串:“bca”,map中(b:1,c:2,a:3)
第 i 次遍历:以此类推
import java.util.HashMap;
class Solution {
public int lengthOfLongestSubstring(String s) {
//建立hashmap,记载每个字符出现的位置
HashMap<Character,Integer> map=new HashMap<>();
//记载起始的下标
int index=0;
int maxlen=Integer.MIN_VALUE;
if(s.length()==0)
return 0;
//遍历字符串
for(int i=0;i<s.length();i++){
//得到下标为i的字符
char c=s.charAt(i);
//情况2
if(map.containsKey(c)&&map.get(c)>=index){
//此时子串长度与maxlen比较,更新maxlen
maxlen=(i-index)>maxlen?i-index:maxlen;
//使index=重复字符下标+1,避开重复字符
index=map.get(c)+1;
}
//更新map
map.put(c,i);
}
//最后再比较一次,以防止"abcdefg"该情况出现
maxlen=(s.length()-index)>maxlen?s.length()-index:maxlen;
return maxlen;
}
}
LeetCode-3.无重复字符的最长字串的更多相关文章
- LeetCode#3 - 无重复字符的最长字串(滑动窗口)
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: abcabcbb 输出的结果应该是3,最长的无重复的字串是'abc' 果然无论做什么都要静下心来啊!昨晚上卡了一个多小 ...
- 【leetcode算法-中等】3. 无重复字符的最长字串
[题目描述] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 " ...
- Leetcode3.Longest Substring Without Repeating Characters无重复字符的最长字串
给定一个字符串,找出不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 ...
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...
- [LeetCode] 3. 无重复字符的最长子串
题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...
- 【leetcode 3. 无重复字符的最长子串】解题报告
思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...
- LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...
- Leetcode——3. 无重复字符的最长子串
难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ...
随机推荐
- idea 断点上面有x
背景:确定你的java代码没有问题,并且编译通过 问题:debug 启动项目的时候没有问题,idea打断点的时候左边红色断点上面有x 原因:java文件和class文件不一致, 解决方法:ant cl ...
- January 01st, 2018 Week 01st Monday
Life's like a movie, write your own. Keep believing, keep pretending. 人生如同电影,书写自己的结局.持续相信,继续演出. Some ...
- 陈远波(java)--Git 入门
本章节讲解思路:1.在Git hup官网注册一个Git账号:2.下载git bash管理工具 3.在git bash上绑定GitHup账号密码: 一:进入GitHup官网:https://githu ...
- 1-100求和 sum(range(101))
print(sum(range(101))) s = 0for i in range(101): s += iprint(s)
- RLP(转发注明出处)
目录 RLP序列化 什么是序列化? 为什么要序列化? RLP序列化处理的两项数据 RLP序列化采取的5项规则: 利用python写的RLP 实际中的使用是个怎么样子? RLP分析 参考目录 @ RLP ...
- [Python] 同时安装了python2和python3时,pip命令该如何使用?
当python2和python3同时安装windows上时,它们对应的pip都叫pip.exe,所以不能够直接使用 pip install 命令来安装软件包. 而是要使用启动器py.exe来指定pip ...
- MYSQL一次千万级连表查询优化(一)
摘自网上学习之用 https://blog.csdn.net/Tim_phper/article/details/78344444 概述: 交代一下背景,这算是一次项目经验吧,属于公司一个已上线平台的 ...
- 1 TCP/IP通信
重点参考长链接http://blog.csdn.net/fengyuzhengfan/article/details/38830115 http://blog.csdn.net/Jsagacity/a ...
- 测试udp服务的端口是否可用
测试tcp服务的端口是否可用,可以使用: telnet ip port 但是如果这个用在upd服务上,就会报错, 因为telnet走的是tcp协议, 比如说192.168.80.131在8888端 ...
- Shell学习心得(二):传递参数、运算符
1.传递参数 可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n.n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推…… 向脚本传递三个参数, ...