无重复字符的最长字串

无重复字符的最长字串

前言

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

思想

利用两指针(变量)逐步向右遍历该字符串。

利用HashSet数据结构约束子串具有无重复性。

利用迭代,前一字串长度与新子串长度每每比较取大值。

代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //哈希集合,记录每个字符是否出现过
        Set<Character> subs = new HashSet<Character>();
        int n = s.length();
        //1.定义变量:右指针初始为-1,代表还未移动
        int r = -1;
        int ans = 0;
        for(int i =0;i<n;++i){
            if(i!=0){
                //先移动左指针,并从HashSet中移除旧的值
                subs.remove(s.charAt(i-1));
            }
           
            while(r+1<n&& !subs.contains(s.charAt(r+1))){
                //如果右指针还未遍历到最后,并且HashSet中没有右指针的值
                //不断移动右指针
                subs.add(s.charAt(r+1));
                r++;
            }

            //逐步将新字串和旧答案比较,取大值
            ans = Math.max(ans,r - i + 1);
        }
        return ans;
    }
}
posted @ 2023-04-25 00:37  郭培鑫同学  阅读(20)  评论(0编辑  收藏  举报