public static int lengthOfLongestSubstring(String s) {
/**
* 思路: abcabcbb
* 先抽取第一个元素a 然后往右遍历,直到遇到相同的元素就停止 那么第一个元素 a不重复的最长字符串为 abc 记录一次长度,并且作比较
* 在抽取第二个元素b 然后往右遍历,直到遇到相同的元素b,那么第二个元素 b不重复最长字符串为 bca 记录一次长度,并且作比较
* ·····以此类推直到最后一个元素被取出为止
*/
//定义一个Set集合存放不重复的字符串
Set<Character> set = new HashSet<>();
//定义一个右指针
int right = -1;
//定义最大长度
int maxLen = 0;
//定义左指针left , left 小于 字符串长度
for (int left = 0; left < s.length(); left++) {
if (left!=0){//这里如果为true , 说明有重复的 abca , 删除
set.remove(s.charAt(left-1));
}
//循环终止条件是右指针不能超过字符串的长度,+1是因为 最初定义为-1
while (right+1<s.length() && !set.contains(s.charAt(right+1))){
set.add(s.charAt(right+1));
right++;
}
maxLen = Math.max(maxLen,right-left+1);// Math.max 去最大值方法
}
return maxLen;
}
LeetCode第三题,无重复字符串的最大长度
最新推荐文章于 2024-08-19 11:12:00 发布