一道很精彩的算法题。给定一个字符串abca,要求输出子串的最大长度(不存在重复的情况),输出为3。
学过网络协议的人都知道HTTP存在滑动窗口用来做流量的控制,服务端或者客户端发送数据会携带窗口的空闲长度。当然此处的滑动窗口并不是指的HTTP。
算法思路:
给定一个字符串,将其分解成字节。
建立一个HashSet。遍历其字节数组。遍历字节数组的时候,每次从HashSet中移除其下标减一的上一个字节。(下标为0的时候不需要)
然后向HashSet中添加字节,添加的时候需要做判断,是否存在重复,重复则跳出循环,并记录其遍历的下标。
然后记录其set中存在的最大长度。窗口后移进行下一次循环遍历。
示例:以abcabc为例 (括号里面的元素为移除的元素。
第一次遍历:set存在 abc
第二次遍历:set 存在(a)bca
第三次遍历:set存在 (ab)cab
第四次遍历:set存在 (abc)abc
class Solutions { public int lengthOfLongestSubstring(String s) { int rks = -1; int max = 0; Set map = new HashSet(); int n = s.length(); for( int i = 0;i if(i!=0){ map.remove(s.charAt(i-1)); } while(rks+1map.contains(s.charAt(rks+ map.add(s.charAt(rks+1)); rks++; } max = Math.max(rks-i+1,max); } return max; } }