Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
O(n) solution(思路:用hashmap可快速锁定当前字母是否有重复,由此可以确定当前[i,j]的i的值,由于已知仅有256个字符,用Array来做index会更快)
class Solution {
public int lengthOfLongestSubstring(String s) {
Map<Character,Integer> map = new HashMap<Character,Integer>();
int max=0,n=s.length();
for(int i =0,j=0 ;j<n; j++){
if(map.containsKey(s.charAt(j))){
i = Math.max(map.get(s.charAt(j))+1,i);
}
max = Math.max(max,j-i+1);
map.put(s.charAt(j),j);
}
return max;
}
}