實現:java
public class Solution { public int lengthOfLongestSubstring(String s ) { int max =0; Map<Character,Integer> map= new HashMap<Character,Integer>(); char[]arr =s .toCharArray(); for(int i =0,j =0;j <s .length();j++){//設置兩個指針,從左向右遍歷 if(map .containsKey(arr[j])){//若是當前元素在map中,則表示有衝突。若是把當前元素加入子串也不會增長最大不一樣元素數,因此統計當前的元素數 if(map .size()>max) max= map.size(); int index =map .get(arr [j ]);//找到map中形成衝突的元素 for(int x =i ;x <=index ;x ++){//從左側的指針開始到index爲止的元素從map中刪除 map.remove( arr[ x]); } map.put( arr[ j], j); //把當前元素加入map中 i= index+1; //左側指針指導index的右側 } else{//若是不在map中,則將當前元素加入map中 map.put( arr[ j], j); } } return max >map .size()?max :map .size();//返回歷史最大值與當前map元素中較大的值 } }