class Solution {
public int longestSubstringWithoutDuplication(String s) {
if(s == null || s.length() == 0){
return 0;
}
char[] ch = s.toCharArray();//转换成字符数组
Set<Character> set = new HashSet<>();
int res = 0;
int left = 0, right = 0;
while( right < ch.length ){
if(!set.contains(ch[right])){
set.add(ch[right]);
right ++;
res = Math.max(res, right-left);// 注意此处是right-lrft,因为right已经right++了。
}else{
set.remove(ch[left]);
left ++;
}
}
return res;
}
}
时间复杂度
时间复杂度为O(n),left和right两个指针分别都扫描一遍,O(2n)即O(n)。