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缓冲区,用于存放当前的子串(不包含重复字符)。遍历字符串,对于每一个字符:
- 若 buffer 中没有重复的字符,则把该字符加入缓冲区;
- 若 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 
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号