LeetCode题解:Longest Substring Without Repeating Characters

Longest Substring Without Repeating Characters

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. For "bbbbb" the longest substring is "b", with the length of 1.

思路:

用两个指针i和j遍历整个字符串。i不断向前移动,同时记录碰到的字符。如果这个字符在i和j之间已经遇到过,则将j移动到i,j之间的这个字符的下一个位置。移动i,j的同时更新字符串的长度。

题解:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int current_length = 0;
        int max_length = 0;
        int current_start = 0;
        
        // store the last occurance of the character
        array<int, 256> use_count;
        fill(begin(use_count), end(use_count), -1); // mark "not found"
        
        for(int i = 0; i < s.size(); ++i)
        {
            char ch = s[i];
            
            if (use_count[ch] == -1)
            {
                // unused
                max_length = max(max_length, ++current_length);
                use_count[ch] = i;
            }
            else
            {
                //used
                
                // update the current length
                current_length -= use_count[ch] - current_start;

                // mark the characters between "current_start" and
                // the occurance of ch within current string as "not found"
                for(int j = current_start; j < use_count[ch]; ++j)
                    use_count[s[j]] = -1;

                // update the starting point
                current_start = i - current_length + 1; // including current char, so +1

                // and the "found" position
                use_count[ch] = i;
            }
        }
        
        return max_length;
    }
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值