LeetCode3最长无重复字符的子串/C++--Set用法

初始化:
map和set封装了二叉树等
成员函数方式提供的常用操作,如:插入、排序、删除、查找等。

set<int> s;

set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。

关于set的一个很好的例子
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.

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
         set<char> myset;
        int ans = 0, i = 0, j = 0;
        for(; i < s.length(); ++i){
            while(myset.insert(s[j]).second && j < s.length()){
                j++; 
                ans = max(ans, j-i);
            }
            myset.erase(s[i]);
        }
        return ans;
    }
};

假设输入时pwwkew.
当i=0时:插入第一个p到myset中,返回1,且长度小于length.j自加1为1。ans取1。
插入第二个w到myset中,返回1,长度小于length,j自加1为2,ans取2。
插入第三个w到myset中,返回0。跳出
清楚第二个w元素。
当i=1时:插入第三个w到myset中,返回1,且长度小于length.j自加1为3。ans取2。
插入第四个k到myset中,返回1,且长度小于length,j自加1为4,ans取2。
插入第五个e到myset中,返回1,且长度小于length,j自加1为5,ans取3。


重复上面步骤最后计算出3。

你可能感兴趣的:(编程语言)