使用双指针以及Map解决最长无重复字串问题
找到字符串的最长无重复字符子串
http://www.nowcoder.com/questionTerminal/b56799ebfd684fb394bd315e89324fb4
设置left为做指针,right为右指针,map<int,int>分别存在数组中得值与索引
初始化时候,left = 0;right =1;map加入arr[0],o
在右指针小于数组长度的时候
对右指针的值与做指针判断是否相等,
如果不相等,那么判断map中是否存在右指针存所指向的值,
(1)如果不存在,那么就将右指针指向的值和索引加入到map中,如果存在,此时用maxlen与此时map的size()进行比较,得到新maxlen,
(2)然后左指针右移,其值为右指针所指向的值的第一次出现的索引,然后map清空,然后map加入左指针索引以及指向的值,右指针为左指针加1;
如果相等,那么将左指针右移一位,右指针也同时右移动
最后返回maxlen与数组长度之间的最大的一个值
public int maxLength (int[] arr) { // write code here //双指针 //双指针 Map<Integer,Integer> map = new HashMap<Integer, Integer>(); int len = 0,maxlen=0; int left = 0,right=1; map.put(arr[left],left); while(right != arr.length){ if(arr[right]!=arr[left]){ if(!map.containsKey(arr[right])){ map.put(arr[right],right); right++; }else{ maxlen = Math.max(map.size(),maxlen); left = map.get(arr[right])+1; map.clear(); map.put(arr[left],left); right = left+1; } }else{ map.put(arr[right],right); left = left+1; right = right+1; } } return Math.max(map.size(),maxlen); }