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.

题目大意

  • 1.求最长的不重复的连续的子序列。

解题思路

  • 1.如果这个字母重复了,找到它之前的那个位置,那么从它之前的那个位置的后一个开始计算的话到现在这个位置就不是重复的了。例如:1 2 3 4 3 7 5 6,这里,3是第一个重复的,找到他之前出现的那个位置的后一个位置即4,这个时候重新开始往后看有事一条好汉了是不是?

AC代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        //重复了就从之前那个位置的后一个再来
    int i = 0, j = 0;
    int visited[256];
    int maxlen = 0;
    fill(visited, visited + 256, 0);
    while (j < s.length()){
        if (visited[s[j]] == 0){
            visited[s[j]] = 1;
            j++;
        }
        else{
            //如果已经访问过了,找到它之前访问过的位置,顺便将他之前的一段子序列标记为未访问,因为下一个起点已经变为k+1了
            while (s[i] != s[j]){
                maxlen = max(maxlen, j - i);
                visited[s[i]] = 0;
                i++;
            }
            //然后从它后一个位置开始访问,那么j位置就不是重复的了,就可以继续向后看了
            i++;
            j++;
        }
    }
    maxlen = max(maxlen, j - i);
    //cout << maxlen << endl;
    return maxlen;
    }
};

你可能感兴趣的:(leetcode)