【Shawn-LeetCode】3. Longest Substring Without Repeating Characters
来源:互联网 发布:mac的qq不能远程 编辑:程序博客网 时间:2024/06/06 01:39
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be asubstring,"pwke"
is a subsequence and not a substring.
解决方案1:粗暴的直接遍历,O(n^4)
public static int lengthOfLongestSubstring(String s) {if(s.length()==0)return 0;int length=1;char[] a=s.toCharArray();int i=0,j=0,k=0,l=0;boolean flag=true;for(i=0;i<s.length()-1;i++){flag=true;A:for(j=i+1;j<s.length();j++){for(k=i;k<j;k++){for(l=k+1;l<=j;l++){if(a[k]==a[l]){flag=false;break A;}}}if(flag){int temp=j-i+1;System.out.println(temp+" "+j+" "+i);if(temp>length)length=temp;}}}return length; }
解决方案2:优化后,将长度作为变量进行循环,但还是没有本质上的区别,还是没有能够逃脱O(n^4)的厄运
public static int lengthOfLongestSubstring(String s) {if(s.length()==0)return 0;int length=1;int StringLength=s.length();//8int subLength=StringLength;int i=0;char[] a=s.toCharArray();A:for(;subLength>1;subLength--){for(i=0;i+subLength-1<StringLength;i++){if(checkRepeat(i,i+subLength-1,s)){//System.out.println(i+" "+(i+subLength-1));return subLength;}}}return length;}public static boolean checkRepeat(int start,int end,String s){char[] a=s.toCharArray();for(int i=start;i<end;i++){for(int j=i+1;j<=end;j++){if(a[i]==a[j])return false;}}return true;}
解决方案3:以上两种方案均在最后一组数据出错,最后一个数据为:
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ abcdefghij”
参考http://blog.csdn.net/waycaiqi/article/details/45936181,在此处也贴出他的代码,采用类似计算机网络中的窗口协议,通过hash表来快速的进行筛选,非常的高效,这组测试数据答案为95,时间较长但还是可以接受的范围。
public class Solution { public int lengthOfLongestSubstring(String s) { if(s==null && s.length()==0) return 0; HashSet<Character> set = new HashSet<Character>(); int max = 0; int walker = 0; int runner = 0; for(;runner<s.length();runner++) { if(set.contains(s.charAt(runner))) { max = (runner-walker)>max?(runner-walker):max; while(s.charAt(walker)!=s.charAt(runner)) { set.remove(s.charAt(walker)); walker++; } walker++; } else { set.add(s.charAt(runner)); } } max = (runner-walker)>max?(runner-walker):max; return max; } }
再贴一个学霸的代码,拿到授权了,就不贴地址了:
class Solution {public: int lengthOfLongestSubstring(string s) { int c[256] = {0}; int first = 0, last = 0; int len = 0; int maxlen = 0; for(int i = 0; i < s.size(); ++i){ if(c[s[i]]){ if(len > maxlen) maxlen = len; last = c[s[i]]; for(int j = first; j < last; ++j){ len--; c[s[j]] = 0; } first = last; } len++; c[s[i]] = i + 1; } if(len > maxlen) maxlen = len; return maxlen; }};
- 【Shawn-LeetCode】3. Longest Substring Without Repeating Characters
- [LeetCode]3.Longest Substring Without Repeating Characters
- LeetCode 3.Longest Substring Without Repeating Characters
- LeetCode --- 3. Longest Substring Without Repeating Characters
- [Leetcode] 3. Longest Substring Without Repeating Characters
- [leetcode] 3.Longest Substring Without Repeating Characters
- [leetcode] 3. Longest Substring Without Repeating Characters
- [Leetcode]3. Longest Substring Without Repeating Characters
- leetcode 3. Longest Substring Without Repeating Characters
- 【Leetcode】3. Longest Substring Without Repeating Characters
- leetcode 3. Longest Substring Without Repeating Characters
- LeetCode-3.Longest Substring Without Repeating Characters
- LeetCode 3.Longest Substring Without Repeating Characters
- LeetCode - 3.Longest Substring Without Repeating Characters
- Leetcode 3. Longest Substring Without Repeating Characters
- 3. Longest Substring Without Repeating Characters LeetCode
- (Leetcode)3. Longest Substring Without Repeating Characters
- leetcode 3. Longest Substring Without Repeating Characters
- oracle允许所有用户访问一个用户的表的方法
- 从零开始学习Java Web(三):servlet和filter的url-pattern
- maven项目连接数据库失败原因之一
- Julie Desk:这个帮你安排会议的AI助手刚刚融了250万欧元
- GTX 1080 装 Ubuntu 16.04
- 【Shawn-LeetCode】3. Longest Substring Without Repeating Characters
- Linux磁盘配额
- hdu-4550-卡片游戏-贪心-java
- Java8-如何将List转变为逗号分隔的字符串
- 浏览器关闭或刷新向后台提交数据(实用解决方法)
- 注册界面刷新事件
- 导入项目 httpservlet报错
- 从零开始学_JavaScript_系列(40)——对象的扩展(3)当枚举、原型链遇见对属性的操作
- 基于Unity3D的并行渲染模型的开发教程(四):Vuforia的开发