LeeCode: 3. Longest Substring Without Repeating Characters

LeeCode: 3. Longest Substring Without Repeating Characters

题目描述

Given a string, find the length of the longest substring without repeating characters.

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.
Given "bbbbb", the answer is "b", with the length of 1.
Given "pwwkew", the answer is "wke", with the length of 3. 
Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

解题思路 —— Hash

利用 hash 表标记各个字母最近出现的位置,当出现重复字母时,将其对应的位置设为当前位置。

AC 代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int hash[256] = { 0 }; // 标记连续出现过的字母最近出现的位置
        int ans = 0, cnt = 0;
        int flag = 0; // 记录当前连续序列的起始位置

        for(size_t i = 0; i <= s.size(); ++i)
        {
            if(i == s.size())
            {
                if(ans < cnt) ans = cnt;
                break;
            }

            if(hash[s[i]] > flag){
                if(ans < cnt) 
                {
                    ans = cnt;
                }
                cnt = i - hash[s[i]];
                flag = hash[s[i]];
            }
            ++cnt;
            hash[s[i]] = i+1;
        }

        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/yanglingwell/article/details/80994503