leetcode--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.

Subscribe to see which companies asked this question.


尺取法

首先设置头尾两个指针,都指向头,然后尾指针开始遍历,在遍历过程中记录每个字母出现个数,每次遍历若当前字母没有出现过,则更新答案长度。若出现过,则将头指针移到重复字母的后面一位。然后继续重复上述操作。最后返回答案即可。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.length() == 1) return 1;
        int l = 0, r = 0, tag[150], ans = 0;
        memset(tag, 0, sizeof(tag));
        for(r = 0; r < s.length(); r++) {
            if(tag[s[r]]) {
                //ans = max(ans, r - l);
                while(s[l] != s[r]) {
                    tag[s[l]]--;
                    l++;
                }
                tag[s[l]]--;
                l++;
            }
            tag[s[r]]++;
            ans = max(ans, r - l + 1);
        }
        return ans;
    }
};


你可能感兴趣的:(leetcode--3. Longest Substring Without Repeating Characters)