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.
其中出现的问题有:“tmmzuxt” 无法通过test,因为t是最后一个元素重复第一个。。
indexOf()从前面开始最先出现的
lastIndexOf()从后面开始最先出现的
list有contains的函数
清空list -----list.clear()
给出大神的答案:
public class Solution {
public int lengthOfLongestSubstring(String s) {
HashSet<Character> set = new HashSet<Character>();
int i=0,j=0,max=0;
while(i<s.length()){
if(!set.contains(s.charAt(i))){
set.add(s.charAt(i++));
max=Math.max(max,set.size());
}else{
set.remove(s.charAt(j++));
}
}
return max;
}
}
set不含重复元素
i++, 先【0】 再自动加到【1】。。。。
charAt取在某个index的特定的char。
两个指针,一个慢的j 一个快的i
j用于删除