Longest Substring Without Repeating Characters

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.

题意:给一个字符串,找出没有重复的最长子串,求出元素个数。

思路:在左侧设置两个指针i,j,j不断向右移动。将j指针指到的元素判断,若是不在map中,则加入map。不然统计map中的元素个数,为当前子串的不一样元素个数,而后将map中从i开始到与当前j指针发生冲突的元素位置位置的元素所有删除,而后把i指针指向当前冲突元素的右侧。

实现: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元素中较大的值
    }
}
相关文章
相关标签/搜索