本篇文章属于 LeetCode 第三道题,同时收录于专栏中将记录 LeetCode 前两百道题的解题思路和代码实现。
题目描述
解题思路
- 定义一个 int 类型的返回结果
- 此题的关键是使用两个指针,所以先定义一个两个 int 类型的 start 和 end 变量并且赋值为 0,指向字符串的开始位置。
- 定义一个变量存储字符串的长度,此变量也可以不用定义,主要用于循环判断
- 定义一个 set,存储两个指针走过的变量
核心思想是使用指针遍历字符串,结束条件为 start index 和 end index 都小于字符串的长度。如果遍历的字符没有在 set 中,将这个字符添加到 set 中,end++,并且进行赋值 result。
如果遍历到的字符在 set 中,说明有重复的子串,将 start index 移到下一位。并且将这个 start index 这个字符串从 set 中移除,继续开始下一次遍历。
最后返回 result。
代码实现
class Solution {
public int lengthOfLongestSubstring(String s) {
int result = 0;
int start = 0;
int end = 0;
int length = s.length();
Set<Character> set = new HashSet<>();
while (start < length && end < length) {
if (!set.contains(s.charAt(end))) {
set.add(s.charAt(end));
end++;
int count = end - start;
result = count > result ? count : result;
continue;
}
set.remove(s.charAt(start));
start++;
}
return result;
}
}
交流技术可以加我微信:QTG43432166