精华内容
下载资源
问答
  • 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复...

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

    示例 1:

    输入: “abcabcbb”
    输出: 3
    解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
    示例 2:

    输入: “bbbbb”
    输出: 1
    解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
    示例 3:

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

    //9行实现:dict用来记录每个字母最后出现的位置
    //start用来记录每个子序列的起始。
    //如果发现某个字符发生了重复,那么我就把start记为这个字符上一次出现的位置。
     
    int lengthOfLongestSubstring(string s) {
            vector<int> dict(256, -1);             //定义一个vector叫做dict,内容是256个-1
            int maxLen = 0, start = -1;            //标尺start        
            for (int i = 0; i != s.length(); i++) {
                if (dict[s[i]] > start)            //如果字符串中的字符大于标尺
                    start = dict[s[i]];            //那么标尺刷新;
                dict[s[i]] = i;                    //把dict中对应的值改为i(最后应该是0123456...)
                maxLen = max(maxLen, i - start);   //max记为最大的i-标尺
            }
            return maxLen;
        }
    
    展开全文
  • 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 滑动窗口 利用HashSet,不能有重复value值特性,当窗口右侧到达处存在重复值时,将左侧窗口向右移一格。 class Solution { public int ...

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

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

    滑动窗口

    利用HashSet,不能有重复的value值特性,当窗口右侧到达处存在重复值时,将左侧窗口向右移一格。

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            Set<Character> ch = new HashSet<>();
            int n = s.length();
            int ans=0,i =0, j = 0;
            while(i<n&&j<n){
                if(!ch.contains(s.charAt(j))){
                    ch.add(s.charAt(j));
                    j++;
                    ans = Math.max(ans,j-i);
                }
                else{
                    ch.remove(s.charAt(i));
                    i++;
                }
               
            }
            return ans;
        }
    }
    

    优化滑动窗口

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            int len = s.length();
            int ans = 0;
            Map<Character,Integer> ch = new HashMap<>() ;
            //j为右窗口,i为左窗口
            for(int i=0,j=0;j<len;j++){
            //当包含相同值时,让左窗口滑动到第一重复元素的位置下一点
             //左边界移动到 相同字符的下一个位置和i当前位置中更靠右的位置,这样是为了防止i向左移动
             //如abba例所示
            if(ch.containsKey(s.charAt(j))){
                      i = Math.max(i,ch.get(s.charAt(j)));##
                }
                ans = Math.max(ans,j-i+1);
                ch.put(s.charAt(j),j+1);
            }
            return ans;
        }
    }
    

    在这里插入图片描述

    展开全文
  • 这个博客写很多,适合初学者 https://blog.51cto.com/11418774/1845832

    这个博客写的很多,适合初学者

    https://blog.51cto.com/11418774/1845832

    展开全文
  • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 解题: 思路:滑动窗口 利用HashSet,不能有重复value值特性,当窗口右侧到达处存在重复值时,将左侧窗口向右移一格。 class Solution { public ...

    LeetCode第3题,无重复字符的最长子串

    题目描述:

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

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

    解题:

    思路:滑动窗口

    利用HashSet,不能有重复的value值特性,当窗口右侧到达处存在重复值时,将左侧窗口向右移一格。

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            // 哈希集合,记录每个字符是否出现过
            Set<Character> occ = new HashSet<Character>();
            int n = s.length();
            // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
            int rk = -1, ans = 0;
            for (int i = 0; i < n; ++i) {
                if (i != 0) {
                    // 左指针向右移动一格,移除一个字符
                    occ.remove(s.charAt(i - 1));
                }
                while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
                    // 不断地移动右指针
                    occ.add(s.charAt(rk + 1));
                    ++rk;
                }
                // 第 i 到 rk 个字符是一个极长的无重复字符子串
                ans = Math.max(ans, rk - i + 1);
            }
            return ans;
        }
    }

    时间复杂度:最坏情况下O(N^2)

    优化:

    只要出现了“重复”,“窗口”的右边界停止,此时左边界向右边移动,直到“滑动窗口”内没有重复的元素。

    map中存放字符和它的index,重复利用map中的信息,把队列的左边的元素移出,直到满足题目要求!

    class Solution {
        public int lengthOfLongestSubstring(String s) {
            if (s.length()==0) return 0;
            HashMap<Character, Integer> map = new HashMap<Character, Integer>();
            int max = 0;
            int left = 0;
            for(int i = 0; i < s.length(); i ++){
                if(map.containsKey(s.charAt(i))){
                    left = Math.max(left,map.get(s.charAt(i)) + 1);
                }
                map.put(s.charAt(i),i);
                max = Math.max(max,i-left+1);
            }
            return max;
            
        }
    }

    时间复杂度:O(N)

    展开全文
  • 3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符最长子串的长度。 示例1: 输入: "abcabcbb" ...解释: 因为无重复字符的最长子串...解释: 因为无重复字符的最长子串是 "b",所以其长度为 1...
  • //以与当前字符相当下一字符为新起始点  currlen = right-i;  break;  }  else if (i == left)//当前字符比较结束  {  currlen ++;  if (currlen > maxlen)  {  maxlen = currlen;//...
  • 我们先从第一个字符开始,只要碰到已经出现过的字符我们就必须从之前出现该字符的index开始重新往后看。 例如‘xyzxlkjh’,当看到第二个‘x’时我们就应该从y开始重新往后看了。 那么怎么判断字符已经出现过了呢...
  • 题目 ... 给定一个字符串,请你找出其中不...解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入:...
  • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解释: 因为无重....
  • 直观滑动窗口方法需要维护数组增删,实际上比较耗时 使用双指针(索引),记录滑动窗口起始和结束索引值,可以减除数组增删操作,提高效率 代码结构和上一种方法基本一致,只不过使用指针位移以及从原数组中...
  • 然后,将j右移,逐步扩大窗口,依次经过b、c、d,此时,窗口内均无重复字符,继续右移j 当j移动到d后面a所在位置时,对应字符a在窗口中已存在,此时,窗口大小为5,去除当前重复一位,窗口大小为4。此时窗口...
  • 求非重复字符串最大长度O(n) 版权声明:本文为经本人订正一处错误,转载请注明出处。 题目: 给定一个字符串str,返回str最长无重复字符子串长度。 如:&amp;amp;amp;amp;quot;abcd&amp;amp;...
  • 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwkew” 输出: 3 解释: 因为无重复...
  • 以下是我自己见解,写不好多多包涵如“abcdb”,两个变量,一个保存目前所遍历字符的下标位置(pre),一个保存当前这个字符最大的无重复长度(cur),而length则取(length,cur)最大长度import java.util.*;...
  • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: s = "pwwkew" 输出: 3 解释: 因为无重复...
  • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。 示例 3: 输入: "pwwkew" 输出: 3 解...
  • 思路 利用滑动窗口 ...利用一个散列表记录每个字符串的下标位置 上代码: package com.zyblue.fastim.common.algorithm; import java.util.HashMap; import java.util.Map; /** * 最大字符串长度...
  • 滑动窗口算法求最大无重复子串长度: ** 1.维护一个起始长度为0窗口,窗口内都是没有重复字符。 2.逐个遍历接收到的字符串,如果新遍历到字符没有在窗口中出现过,那么窗口就“吃掉”这个字符,窗口右边...
  • 首先想到将未重复的字符串维护起来,最后来比对字串长度,得出最大长度。然后在实现过程中发现这样维护并不好做,于是想到了另一个思路,记录未重复子字符长度,当有重复的字符出现时候记录下此时子串...
  • Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3....
  • 返回最大长度 这种做法每次把set清空了,没有保存记录,求个最大值还行,要是让打印出最大子串那就jj了 class Solution { public int lengthOfLongestSubstring(String s) { int len = s.length(); int max = 0; ...
  • import java.util.*; public class Solution {  public int lengthOfLongestSubstring(String s) {  int i=0;  int j=1;  int t=0;  int max=0;  int current=0;... if(s.length()==0||s==nul
  • 最长无重复字符串

    2020-03-14 00:24:19
    最大长度还涉及到字符串的起点问题 所以用动态规划这两个参数——起点和最大长度 我们用left和l来表示的 时间复杂度:O(n) class Solution: def lengthOfLongestSubstring(self, s: str) -> int:...
  • 题目要求:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 按照题解里面思路写:双指针遍历字符串,beg为不重复子串开始位置,end为结束位置,用ooc存放不重复子串内容,若end指向字符...
  • 需要注意是,如何去判断当前字符串是否与已经组合的字符串是否有重复。 可以使用位掩码来解决。 数字与字母映射(‘a’ -> 1, ‘b’ -> 2, ‘c’ -> 4)以此类推,如果已组合字符位掩码与当前所选择子...
  • 无重复字符的最大子串 题目 给出一个字符串,请你找出其中不含有重复字符的最长子串的长度。 链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ 思路 构造一个辅助字符串 ...
  • 寻找字符串中最大的无重复字符串长度: 思路: 这道题主要用到思路是:滑动窗口 什么是滑动窗口? 其实就是一个队列,比如字符串中 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成...
  • 无重复字符串的最长字符串 题目是这样的: 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。 举几个例子: 例1: 输入:“abcdcc” 输出:4 理由: 这个字符串中最长无重复的是“abcd”,长度为4 例...
  • 这道题需要借助哈希查找keyO(n) 时间... 用cur变量从给定字符串str开头开始 一位一位向右查看字符,直到整个字符串遍历完, 对每一位字符进行如下:  当前位置字符为 c = str[cur]  查询当前字符 ...
  • 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 总结一下这个题目解题思路: 主要是滑动窗口这个概念,维护一个内部包含不重复元素窗口,如果有新元素进来,检查一下这个元素是否在窗口内;如果不...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 314
精华内容 125
关键字:

无重复字符串的最大长度