题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/
题目:
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, 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.
利用hashmap存储不重复子串,key为字符,value为此字符的位置。从前向后进行遍历,只要map 中没有当前字符,便将其加入map 。并将子串长度加一。若当前字符已经出现在map 中,获得map中 此字符的位置,清除此位置以及之前的的所有key 。从此位置之后重新计算子串,保证了子串的不重复。
java 代码实现:
public class Solution {
public int lengthOfLongestSubstring(String s) {
if(s == null) return 0;
HashMap
int start = 0;
int maxLen = 0;
int len = 0;
for(int i = 0; i < s.length(); i++){
if(!map.containsKey(s.charAt(i))){
len++;
if(len > maxLen) maxLen = len;
map.put(s.charAt(i), i);
}else{
int index = map.get(s.charAt(i));
for (int j = start; j <= index; j++){
map.remove(s.charAt(j));
}
map.put(s.charAt(i), i);
start = index+1;
len = i-index;
}
}
return maxLen;
}
}