Leetcode 第三题 Longest Substring Without Repeating Characters JAVA解法
来源:互联网 发布:哈布斯堡家族现状知乎 编辑:程序博客网 时间:2024/05/21 13:22
class Solution {
// 思路:
把String转化成一个character的数组
然后把这个数组的元素一一放到hashmap里面去
从第一个字母开始 一直放 直到遇到第一次重复(用 hashmap.containsKey 方法来判断这个字母有没有重复过)
放进去的时候有讲究 就是把放进去的value设为数组的下 比如把stringArr[i] → i 之后可以用来判断index
首先来判断此时的hashmap的大小(hashmap里的元素都是非重复的) 跟max进行比较
然后 找到重复的元素的index
比如 vsdsaf 我们放进了v s d到hashmap 当我们放入第二个s的时候 就回得到第一个s的index
然后我们的目标是把从第一个字母到第一个重复的字母这些全部删掉
因为vsd是vs开头的最长的非重复的substring了 之后就会碰到vsds 删掉vs 我们就可以从ds开始 然后dsaf这么往下找下去
最后返回max的时候注意 有可能全部都是非重复元素 这时我们应该比较一下max和hashmap.size()的大小关系
public static int lengthOfLongestSubstring(String s) {
char[] stringArr = s.toCharArray();
Map<Character,Integer> hashmap = new HashMap<Character,Integer>();
int max = 0;
int flag = 0;
for(int i = 0 ; i < stringArr.length ; i++)
{
if(!hashmap.containsKey(stringArr[i])) {
hashmap.put(stringArr[i], i);
continue;
}
if(hashmap.containsKey(stringArr[i])) {
max = Math.max(hashmap.size(),max);
int repeatedIndex = hashmap.get(stringArr[i]);
for(int j = flag; j<= repeatedIndex ; j++)
{
hashmap.remove(stringArr[j]);
}
flag = repeatedIndex + 1;
hashmap.put(stringArr[i], i);
}
}
return max>=hashmap.size() ? max : hashmap.size();
}
}
// 思路:
把String转化成一个character的数组
然后把这个数组的元素一一放到hashmap里面去
从第一个字母开始 一直放 直到遇到第一次重复(用 hashmap.containsKey 方法来判断这个字母有没有重复过)
放进去的时候有讲究 就是把放进去的value设为数组的下 比如把stringArr[i] → i 之后可以用来判断index
首先来判断此时的hashmap的大小(hashmap里的元素都是非重复的) 跟max进行比较
然后 找到重复的元素的index
比如 vsdsaf 我们放进了v s d到hashmap 当我们放入第二个s的时候 就回得到第一个s的index
然后我们的目标是把从第一个字母到第一个重复的字母这些全部删掉
因为vsd是vs开头的最长的非重复的substring了 之后就会碰到vsds 删掉vs 我们就可以从ds开始 然后dsaf这么往下找下去
最后返回max的时候注意 有可能全部都是非重复元素 这时我们应该比较一下max和hashmap.size()的大小关系
public static int lengthOfLongestSubstring(String s) {
char[] stringArr = s.toCharArray();
Map<Character,Integer> hashmap = new HashMap<Character,Integer>();
int max = 0;
int flag = 0;
for(int i = 0 ; i < stringArr.length ; i++)
{
if(!hashmap.containsKey(stringArr[i])) {
hashmap.put(stringArr[i], i);
continue;
}
if(hashmap.containsKey(stringArr[i])) {
max = Math.max(hashmap.size(),max);
int repeatedIndex = hashmap.get(stringArr[i]);
for(int j = flag; j<= repeatedIndex ; j++)
{
hashmap.remove(stringArr[j]);
}
flag = repeatedIndex + 1;
hashmap.put(stringArr[i], i);
}
}
return max>=hashmap.size() ? max : hashmap.size();
}
}
阅读全文
0 0
- Leetcode 第三题 Longest Substring Without Repeating Characters JAVA解法
- leetcode第三题Longest Substring Without Repeating Characters java
- LeetCode 第三题(Longest Substring Without Repeating Characters)Java
- leetcode 第三题 Longest Substring Without Repeating Characters
- LeetCode 第三题,Longest Substring Without Repeating Characters
- Longest Substring Without Repeating Characters —leetcode第三题
- leetcode 第三题Longest Substring Without Repeating Characters
- leetcode第三题Longest Substring Without Repeating Characters
- [Leetcode] Longest Substring Without Repeating Characters (Java)
- Longest Substring Without Repeating Characters -- Leetcode Java
- [Leetcode]Longest Substring Without Repeating Characters java
- [LeetCode][Java] Longest Substring Without Repeating Characters
- LeetCode java Longest Substring Without Repeating Characters
- LeetCode : Longest Substring Without Repeating Characters [java]
- Java-LeetCode-Longest Substring Without Repeating Characters
- Java Leetcode Longest Substring Without Repeating Characters
- 【LeetCode】 Longest Substring Without Repeating Characters(Java)
- Longest Substring Without Repeating Characters leetcode java
- C语言实现16进制按照2进制反序,输出的结果用16进制显示
- Google增强现实解决方案介绍---ARCore
- unity使用UGUI特效裁剪
- Struts2从后台传递数据到前台
- RxJava和RxAndroid
- Leetcode 第三题 Longest Substring Without Repeating Characters JAVA解法
- python 读入多行数据
- 数据库那点事(Mysql)-4
- hdu 1548 A strange lift
- HDU 6209 二分分数
- Vrui VR Toolkit --- Vrui 虚拟现实工具集
- 《从Paxos到zookeeper分布式一致性原理与实践》笔记
- Spring MVC请求流程
- windbg扩展python脚本