LeetCode 3 - Longest Substring Without Repeating Characters

一、问题描述

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


posted @ 2015-05-12 00:35  神奕  阅读(109)  评论(0编辑  收藏  举报