该题使用了滑动窗口来解决此算法,如果使用暴力破解的方法,可能导致更高的时间复杂度
class Solution {
public int lengthOfLongestSubstring(String s) {
//这里定义left作为左指针
int left=0;
//最大长度,作为最后返回的结果
int maxLen=0;
//这里选用Set集合,因为Set集合的特点是无序不重复
HashSet<Character> set=new HashSet<>();
//此处i就代表右指针
for(int i=0;i<s.length();i++)
{
//判断当前滑动到的子串是否包含该元素,如果包含这个元素,则证明子串中出现了重复的元素
//此时当左指针需要向前移动,并且从Set中移除掉与当前元素重复的元素,直到移除出来为止
//把当前元素从Set集合中移除出来之后,将当前元素加入到集合中
while(set.contains(s.charAt(i)))
{
set.remove(s.charAt(left));
left++;
}
set.add(s.charAt(i));
//右指针长度-左指针长度+1(因为索引是从0开始的)
maxLen=Math.max(maxLen,i-left+1);
}
return maxLen;
}
}
上述回答中也可以只用哈希表来作为存储结构