leetcode第三题无重复字符的最长子串的java实现
2019-08-13 09:47
405 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bulingbulinging/article/details/99408518
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution { public int lengthOfLongestSubstring(String s) { } }
一开始自己用的暴力寻找法,直接找到所有的子串然后判断他们是不是有重复字符
public int lengthOfLongestSubstring(String s) { int ans=0; int len=s.length(); for (int i=0;i<len;i++){ for (int j=i+1;j<=len;j++){ if (allunique(s,i,j)) ans=Math.max(ans,j-i); } } return ans; } public boolean allunique(String str,int start,int end){ Set<Character> map=new HashSet<>(); for (int i=start;i<end;i++){ if(map.contains(str.charAt(i))) return false; map.add(str.charAt(i)); } return true; }
结果运行时间过长了
于是看了官方的解题思路,有个“滑动窗口”的办法,一看感觉很像KMP,借助了HashSet结构,不得不说java的哈希图的运用是真的广泛
public int lengthOfLongestSubstring(String s) { int len=s.length(); Set<Character> map=new HashSet<>(); int i=0; int j=0; int ans=0; while (i<len&&j<len){ if(!map.contains(s.charAt(j))){ map.add(s.charAt(j++)); ans=Math.max(ans,j-i); }else { map.remove(s.charAt(i++)); } } return ans; }
附上测试用的主方法代码
public static void main(String[] args) { Solution solution=new Solution(); Scanner scanner=new Scanner(System.in); String string=scanner.nextLine(); System.out.println(solution.lengthOfLongestSubstring(string)); }
2019-08-13
相关文章推荐
- LeetCode题目C++实现:3. 无重复字符的最长子串
- LeetCode03 - 无重复字符的最长子串(Java 实现)
- leetcode之3. 无重复字符的最长子串python实现
- LeetCode3. python实现:无重复字符的最长子串问题☆☆
- Java实现-最长无重复字符的子串
- 【Java】【LeetCode 3】 Longest Substring Without Repeating Characters 最长无重复字符的子串
- LeetCode03 - 无重复字符的最长子串(Java 实现)
- leetcode刷题之 无重复字符的最长子串(go实现)
- leetcode 3. 无重复字符的最长子串(Java 版)
- leetcode第三题:无重复字符的最长子串
- 【LeetCode】第三题:无重复字符的最长子串
- LeetCode: 3 无重复字符的最长子串 (Java)
- LeetCode3. 无重复字符的最长子串(Java)
- LeetCode第三题无重复字符的最长子串
- [LeetCode]3. Longest Substring Without Repeating Characters 最长无重复子串解析。java
- LeetCode-3:Longest Substring Without Repeating Characters (最长无重复字符的子串) --medium
- LeetCode3. 无重复字符的最长子串(python)
- 定义一个栈的数据结构,实现min函数,要求push,pop,min时间复杂度是0(1);找出字符串中的最长子串,要求子串不含重复字符,时间复杂度是O(n);
- LeetCode给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
- LeetCode 3. 无重复字符的最长子串