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.
找到最长的子字符串,其思想是一次遍历,两个指针i和j,存在map中,如果没有重复的,则直接+1,如果有重复的,则把j的位置后移,然后计算max
public
int
lengthOfLongestSubstring(
String
s)
{
if
(s.length()==
0
)
return
0
;
HashMap
<Character, Integer>
map
=
new
HashMap
<Character, Integer>();
int
max
=
0
;
for
(
int
i=
0
, j=
0
; i<s.length(); ++i){
if
(
map
.containsKey(s.charAt(i)))
{ j = Math.
max
(j,
map
.
get
(s.charAt(i))+
1
); //关键点:j只能往后走,不能往前看。
}
map
.put(s.charAt(i),i);
max
= Math.
max
(
max
,i-j+
1
);
}
return
max
;
}