教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 LeetCode面试算法-力扣 3. 无重复字符的最长子串

LeetCode面试算法-力扣 3. 无重复字符的最长子串

发布时间:2021-04-22   编辑:jiaochengji.com
教程集为您提供LeetCode面试算法-力扣 3. 无重复字符的最长子串等资源,欢迎您收藏本站,我们将为您提供最新的LeetCode面试算法-力扣 3. 无重复字符的最长子串资源

3. 无重复字符的最长子串

题目描述

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


示例 1:
    输入: "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。


分析:滑动窗口,int[] m = new int[256]创建256大小的整型数组储存256个ASCII字符,res表示最长无重复子串的长度,left表示无重复子串左窗口下标,遍历字符串并移动左窗口,i - left 1计算最长无重复子串,i表示最长无重复子串最右边的位置,left表示最左边的位置,以字符串"abcabcbb"为例:

        i=0   s.charAt(i)=a   m[s.charAt(i)]=0   left=0   res=1
        i=1   s.charAt(i)=b   m[s.charAt(i)]=0   left=0   res=2
        i=2   s.charAt(i)=c   m[s.charAt(i)]=0   left=0   res=3
        i=3   s.charAt(i)=a   m[s.charAt(i)]=1   left=1   res=3
        i=4   s.charAt(i)=b   m[s.charAt(i)]=2   left=2   res=3
        i=5   s.charAt(i)=c   m[s.charAt(i)]=3   left=3   res=3
        i=6   s.charAt(i)=b   m[s.charAt(i)]=5   left=5   res=3
        i=7   s.charAt(i)=b   m[s.charAt(i)]=7   left=7   res=3


class Solution {
    public int lengthOfLongestSubstring(String s) {
        int[] m = new int[256];
        int res = 0, left = 0;
        for (int i = 0; i < s.length(); i  ) {
            left = Math.max(left, m[s.charAt(i)]);
            res = Math.max(res, i - left   1);
            m[s.charAt(i)] = i   1;
        }
        return res;
    }
}

 

到此这篇关于“LeetCode面试算法-力扣 3. 无重复字符的最长子串”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
LeetCode面试算法-力扣 3. 无重复字符的最长子串
leetcode算法题—golang—无重复的字符的最长子串(题3)
53. 最大子序和 golang (动态规划与贪心算法)
php字符串函数有哪些
python如何使用正则表达式
mysql 某个字段替换某个名词
php全局变量之学习笔记
php计算未知长度的字符串中出现的次数最多字符的代码
python string是什么
腾讯php程序员面试题分享

[关闭]
~ ~