剑指 Offer II 016. 不含重复字符的最长子字符串

算法记录

LeetCode 题目:

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



说明

一、题目

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

二、分析

  • 可以维护一个双指针来探测,一个指针指向当前序列的开始位置用于裁剪重复的元素,另一个指向最后一个位置添加新的元素,这样子序列的长度就是两个指针之间插值加1了。
  • 往前添加元素时一旦遇见的字符已经在序列中出现过了,那就将裁剪指针挪到重复字符的下一个字符,新的子序列将没有重复元素,这就需要维护一个记录当前字符的工具,这里使用一个字符数组来代替,值就是字符出现的次数,大于一即可认为出现了字符重复。
class Solution {
    
    
    public int lengthOfLongestSubstring(String s) {
    
    
        if(s.length() < 2) return s.length();
        int[] dict = new int[128];
        int left = 0, right = 0, len = 1;
        for(;right < s.length(); right++) {
    
    
            dict[s.charAt(right)]++;
            if(dict[s.charAt(right)] == 1) len = Math.max(len, right - left + 1);
            while(dict[s.charAt(right)] > 1) {
    
    
                dict[s.charAt(left)]--;
                left++;
            }
        }
        return len;
    }
}

总结

没啥技巧,靠脑子想。

Guess you like

Origin blog.csdn.net/MTYSYS19990212/article/details/121373380