zoukankan      html  css  js  c++  java
  • LeetCode 3

    一、问题描述

    Description:

    Given a string, find the length of the longest substring without repeating characters.

    For example:

    For "abcabcbb", the longest substring without repeating letters is "abc", which the length is 3.

    For "bbbbb", the longest substring is "b", with the length of 1.

    给定一个字符串,找出不包含重复字符的最长的子串,返回该子串的长度。


    二、解题报告

    思路:维护一个buffer缓冲区,用于存放当前的子串(不包含重复字符)。遍历字符串,对于每一个字符:

    1. 若 buffer 中没有重复的字符,则把该字符加入缓冲区;
    2. 若 buffer 中存在该字符(假设位于pos),则说明重复了。记录缓冲区的长度,同时更新最长的子串长度。
      • 删除 buffer 的 0~pos 这一段,然后继续迭代。

    关键就在于当发现重复的字符时,需要删除缓冲区的前面一部分。

    下面直接上代码:

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            int maxlen = 0;
            string buffer;
            for(int i=0; i<s.size(); ++i)
            {
                int pos = buffer.find(s[i]);
                if(pos >= 0)   // 重复
                {
                    // 更新最长长度
                    maxlen = maxlen > buffer.size()? maxlen : buffer.size();
                    // 删除从0到pos的所有字符
                    buffer.erase(buffer.begin(), buffer.begin()+pos+1);
                }
                buffer += s[i];
            }
            return maxlen > buffer.size() ? maxlen : buffer.size();
        }
    };





    LeetCode答案源代码:https://github.com/SongLee24/LeetCode


  • 相关阅读:
    C#基础知识之GC 垃圾回收
    获取地址栏参数并转化为对象
    input type属性为number时,去掉右边的上下箭头
    vscode用服务打开html
    富文本的原理和插件使用
    原生js拖拽、jQuery拖拽、vue自定义指令拖拽
    js的call()方法
    js继承
    网页禁止复制和解除禁止复制
    ES6-解构赋值
  • 原文地址:https://www.cnblogs.com/songlee/p/5738068.html
Copyright © 2011-2022 走看看