第五周 leetcode 3. Longest Substring Without Repeating Characters(Medium)

来源:互联网 发布:营销活动效果数据分析 编辑:程序博客网 时间:2024/06/05 00:44

题目描述:

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.若当前字符在子串中没有出现过, 将该字符标记为出现过flag=1,记录当前最长无重复子串长度;
2.若出现过,则清除子串中该字符以及之前字符的标记flag=0,然后记录删减重复字符后子串的长度;
3.若遍历完毕后,仍未发现重复字符,则记录此时长度;
最后,在记录的无重复子串长度中找出最大值。

代码:

class Solution {public:    int lengthOfLongestSubstring(string s) {        if (s.size() == 0) return 0;        bool flag[256] = {false}; // 记录当前无重复串中字符出现情况        vector<int> length; // 记录所有不重复串的长度        int len = 0;        for (int i = 0; i < s.size(); ) { // 遍历字符串            if (!flag[s[i]]) {                len++;                flag[s[i]] = true;                i++;            }            else {                while (s[length.size()] != s[i]) {                    flag[s[length.size()]] = false; //                     length.push_back(len);                    len--;                }                length.push_back(len);                i++;            }        }        length.push_back(len); // 记录一直到结束都无重复的子串长度        for (int i = 0; i <length.size(); i++) {  // 找出最大值            if (length[i] > len)                len = length[i];        }        return len;    }};

代码运行结果:
这里写图片描述

阅读全文
0 0
原创粉丝点击