Longest Substring Without Repeating Characters
2016-02-01 16:10
295 查看
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring
is "b", with the length of 1.
首先按照给出的提示用map做了一下,提示超时。
但是只有一个for循环,为什么会超时呢,下边是实现的源码。
不用Map的话,可以采用下边这个方法来做
is "b", with the length of 1.
首先按照给出的提示用map做了一下,提示超时。
public int lengthOfLongestSubstring(String s) { if(s.length()==0) return 0; char sArry[] = s.toCharArray(); int pre = 0; HashMap<Character,Integer> inMap = new HashMap<Character, Integer>(); for(int i=0;i<sArry.length;i++){ if(!inMap.containsKey(sArry[i])){ inMap.put(sArry[i], i); }else{ pre = Math.max(pre, inMap.size()); i = inMap.get(sArry[i]); inMap.clear(); } } return Math.max(pre, inMap.size()); }
但是只有一个for循环,为什么会超时呢,下边是实现的源码。
public boolean containsKey(Object key) { Iterator<Map.Entry<K,V>> i = entrySet().iterator(); if (key==null) { while (i.hasNext()) { Entry<K,V> e = i.next(); if (e.getKey()==null) return true; } } else { while (i.hasNext()) { Entry<K,V> e = i.next(); if (key.equals(e.getKey())) return true; } } return false; }
不用Map的话,可以采用下边这个方法来做
public int lengthOfLongestSubstring(String s) { if(s==null) return 0; //默认状态为false,每一个字符都有一个码值 boolean[] flag = new boolean[256]; int result = 0; int start = 0; char[] arr = s.toCharArray(); for (int i = 0; i < arr.length; i++) { char current = arr[i]; //再一次存在的时候 if (flag[current]) { //将当前最大和之前最大做一个比较,取最大的保存 result = Math.max(result, i - start); //将相同之前的数全部置为false,遍历后边的数组 for (int k = start; k < i; k++) { if (arr[k] == current) { start = k + 1; break; } flag[arr[k]] = false; } } else { //存在的话置为true flag[current] = true; } } result = Math.max(arr.length - start, result); return result; }
相关文章推荐
- ztree树构造的一些解决方案,getNodes()的作用
- Spring MVC 教程,快速入门,深入分析
- 广东灏瀚科技icare3.0系统学习之旅---icare3.0用法字典的维护
- centos彻底删除文件夹、文件命令
- Nginx(3) - Controlling nginx
- 【React Native开发】React Native控件之ViewPagerAndroid讲解以及美团首页顶部效果实例(17)
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- MySQL建表规范与常见问题
- 微信投票系统 开发
- 【Volley核心类分析】RequestQueue(一)
- 线性表心得
- 从头认识Spring-1.11 注入List或Set(这个例子比较体现代码复用)
- 不同种类软件的比较
- jQuery速查表
- 取消pppoe后,mysql正常退出!
- Android EventBus 的项目使用
- variadic template (可变参数模板)
- Time操作
- 天津Uber优步司机奖励政策(2月1日~2月7日)
- Hello Makefile