现在的位置: 首页 > 综合 > 正文

LeetCode题解:Longest Substring Without Repeating Characters

2019年07月24日 ⁄ 综合 ⁄ 共 1101字 ⁄ 字号 评论关闭

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;
    }
};

抱歉!评论已关闭.