无重复字符的最长子串

75 阅读1分钟

本篇文章属于 LeetCode 第三道题,同时收录于专栏中将记录 LeetCode 前两百道题的解题思路和代码实现。

LeetCode 链接

题目描述

image.png

解题思路

  • 定义一个 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