• 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


  • 相关阅读:
    hihoCoder#1142(三分求极值)
    hihoCoder#1095(二分搜索)
    hihoCoder#1139(二分+bfs)
    java亦或(^)
    JAVA线程
    java中io流浅析
    java循环
    java集合练习
    JAVA集合
    java面向对象(串)
  • 原文地址:https://www.cnblogs.com/songlee/p/5738068.html
Copyright © 2020-2023  润新知