LeetCode 无重复最长子串 Java 双指针

题目描述

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

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters。

相似题目

字符串的排列

找到字符串中所有字母异位词

最小覆盖子串

日志统计

思路

典型的双指针加滑动窗口,设left为滑动窗口的左边界,
right为右边界;
1.用一个数组记录每个字符出现的个数
2.当某一个字符出现的个数大于1的时候,滑动窗口开始缩小,
l++,并减掉左端点的字符出现的个数,直到没有重复

代码::

class Solution {
    
    
    public int lengthOfLongestSubstring(String s) {
    
    
        int length=s.length();
        char arr[]=s.toCharArray();
        int l=0;
        int r=0;
        int max=0;
        int now[]=new int[128];
        while(r<length){
    
    
            char temp=arr[r];
            now[temp]++;
            r++;
           
            while(now[temp]>1){
    
    
                char temp2=arr[l];
                now[temp2]--;
                l++;
            }
            max=Math.max(max,r-l);
        }
        return max;

    }
}

猜你喜欢

转载自blog.csdn.net/qq_44844588/article/details/108156652